奇怪的链接提取行为

时间:2012-07-22 04:25:33

标签: python

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/ref=dp_top_cm_cr_acr_txt?ie=UTF8&showViewpoints=1

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

2 个答案:

答案 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规则允许您在执行此操作之前做的任何事情。]