奇怪的链接提取行为

2024-10-04 09:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

Python在这里。我试图提取一个链接,特别是亚马逊产品页面上“所有评论”的链接。我得到了一个意想不到的结果。你知道吗

import urllib2
req = urllib2.Request('http://www.amazon.com/Ole-Henriksen-Truth-Collagen-         Booster/dp/B000A0ADT8/ref=sr_1_1?s=hpc&ie=UTF8&qid=1342922857&sr=1-1&keywords=truth')
response = urllib2.urlopen(req)
page = response.read()
start = page.find("all reviews")
link_start = page.find("href=", start) + 6
link_end = page.find('"', link_start)
print page[link_start:link_end]

程序应输出: http://www.amazon.com/Ole-Henriksen-Truth-Collagen-Booster/product- reviews/B000A0ADT8/ref=dp_top_cm_cr_acr_txt?ie=UTF8&showViewpoints=1

相反,它输出: http://www.amazon.com/Ole-Henriksen-Truth-Collagen-Booster/product-reviews/B000A0ADT8


Tags: comhttpamazonwwwpagelinkfindurllib2
2条回答

啊,好吧。如果您使用常见的伪装用户代理的伎俩,例如:

req = urllib2.Request('http://www.amazon.com/Ole-Henriksen-Truth-Collagen-Booster/dp/B000A0ADT8/ref=sr_1_1?s=hpc&ie=UTF8&qid=1342922857&sr=1-1&keywords=truth')
ua = 'Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20110506 Firefox/4.0.1'    
req.add_header('User-Agent', ua)
response = urllib2.urlopen(req)

那你应该得到像

localhost-2:coding $ python plink.py
http://www.amazon.com/Ole-Henriksen-Truth-Collagen-Booster/product-reviews/B000A0ADT8/ref=dp_top_cm_cr_acr_txt/190-6179299-9485047?ie=UTF8&showViewpoints=1

可能更接近你想要的。你知道吗

[免责声明:在你做之前,一定要确认亚马逊的TOS规则允许你做任何事情..]

我得到了与您相同的结果,但这似乎只是因为Amazon为您的Python脚本提供的页面与为我的浏览器提供的页面不同。我将下载的页面写到磁盘上,并将其加载到文本编辑器中,果然,链接以ADT8"结尾,没有所有的/ref=dp_top内容。你知道吗

为了帮助说服Amazon为您提供与浏览器相同的页面,您的脚本可能必须更像浏览器(例如,通过接受和发送cookies)。mechanize模块可以对此有所帮助。你知道吗

相关问题 更多 >