1

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

4

2 回答 2

1

我得到了与您相同的结果,但这似乎仅仅是因为亚马逊为您的 Python 脚本提供的页面与它为我的浏览器提供的页面不同。我将下载的页面写入磁盘并将其加载到文本编辑器中,果然,链接以ADT8"没有所有/ref=dp_top内容结束。

为了帮助说服亚马逊为您提供与浏览器相同的页面,您的脚本可能必须更像浏览器(例如,通过接受和发送 cookie)。mechanize模块可以帮助解决这个问题。

于 2012-07-22T04:42:40.410 回答
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 规则允许你做任何事情..]

于 2012-07-22T04:51:19.777 回答