Python noob在这里。我正在尝试提取链接,特别是亚马逊产品页面上“所有评论”的链接。我得到了意想不到的结果。
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
答案 0 :(得分:1)
我得到了相同的结果,但这似乎只是因为亚马逊为您的Python脚本提供的页面与它为浏览器提供的页面不同。我将下载的页面写入磁盘并将其加载到文本编辑器中,果然,链接以ADT8"
结尾,没有所有/ref=dp_top
内容。
为了帮助说服亚马逊为您提供与浏览器相同的页面,您的脚本可能必须更像浏览器(例如,通过接受和发送cookie)。 mechanize模块可以为此提供帮助。
答案 1 :(得分:0)
啊,好的。如果您执行伪造用户代理的常用技巧,例如:
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规则允许您在执行此操作之前做的任何事情。]