我有一个Python代码来抓取Amazon产品清单。我已经设置了代理和标题。在每次爬行之前,我也有sleep()。然而,我仍然无法得到数据。我得到的信息是:
要讨论自动访问Amazon数据的问题,请联系api-services-support@amazon.com。
我的代码的部分内容是:
url = "https://www.amazon.com/Baby-Girls-Shoes/b/ref=sv_sl_fl_7239798011?ie=UTF8&node=7239798011"
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}
proxies_list = ["128.199.109.241:8080","113.53.230.195:3128","125.141.200.53:80","125.141.200.14:80","128.199.200.112:138","149.56.123.99:3128","128.199.200.112:80","125.141.200.39:80","134.213.29.202:4444"]
proxies = {'https': random.choice(proxies_list)}
time.sleep(0.5 * random.random())
r = requests.get(url, headers, proxies=proxies)
page_html = r.content
print page_html这个问题并不是Stackoverflow上其他可用的问题的重复,因为其他人建议使用代理、头和延迟(睡眠),我已经完成了所有这些。即使做了他们建议的事,我也不能刮。
代码最初是工作的,但在刮了几页之后就停止了工作。
发布于 2017-01-08 19:00:19
而不是:
r = requests.get(url, headers, proxies=proxies)做:
r = requests.get(url, headers=headers, proxies=proxies)这为我解决了这个问题。希望决议能继续有效。
发布于 2016-12-28 17:02:12
根据您的描述,Amazon可能会做一些额外的事情(例如,使用cookie)来检查您是否在使用浏览器。但这并不是说你无法克服它:我要看到浏览器的请求和脚本的请求之间的区别,就是检查浏览器,并将一个请求作为curl复制到amazon。然后使用这个工具将curl命令转换为python请求代码。在这里,您有一个与浏览器上的请求完全相同的请求。这样做几次,以了解amazon是否/如何在每个请求上修改cookie,然后尝试使用脚本来模仿这种行为。
如果您确信请求看起来完全相同,则可能需要增加两个连续请求之间的等待时间。我希望这能帮到你。
发布于 2016-12-28 16:42:15
尝试在请求中使用会话。它将记住cookies和headers。如果失败,我将尝试使用selenium 2与铬驱动程序或幻影驱动程序,如果您喜欢无头。
https://stackoverflow.com/questions/41366099
复制相似问题