【发布时间】:2018-08-06 03:42:03
【问题描述】:
我有一个关于网络抓取亚马逊文章价格的问题。我试图得到一篇文章的价格,不幸的是它并不总是有效。我随机得到状态码 503(服务器不可用)。如果状态码 == 200,我可以通过 while 循环来解决这个问题。 我想了解服务器不可用的主要问题,所以我也许可以解决主要问题而不是解决它。到目前为止,该问题仅出现在亚马逊上。
这是我的 10 次测试代码。请求通常失败 2/10 次
import requests
from bs4 import BeautifulSoup
for i in range(10):
page = requests.get("https://www.amazon.de/Bloodborne-Game-Year-PlayStation-4/dp/B016ZU4FIQ/ref=sr_1_3?ie=UTF8&qid=1519566642&sr=8-3&keywords=bloodborne+ps4")
if page.status_code != 200:
print("Error status code: " + str(page.status_code))
continue
soup = BeautifulSoup(page.content, "html.parser")
price = soup.find(id="priceblock_ourprice", class_="a-size-medium a-color-price")
price_string = price.get_text()
print(price_string)
【问题讨论】:
-
亚马逊故意阻止抓取它的前端。像这样抓取网站也违反了他们的 TOS,如果可能,请考虑使用他们的 API。亚马逊很可能会根据用户代理限制您被允许发出和/或阻止的请求数量。如果您在请求中添加浏览器用户代理标头,可能会获得更好的结果。
-
好的,我想把它废弃用于我自己的练习。我是 python 初学者,这只是一个小小的价格警报 :) 感谢您的回答
-
@sytech 您说的是哪些 API?如果您指的是“产品广告 API”,则它们不适用于“普通”用户。看这里:webservices.amazon.com/paapi5/documentation/…
-
@mastupristi 如果未提供您需要的 API,那么如果您要遵守服务条款,这几乎就是故事的结局。一般来说,抓取产品页面可能违反了服务条款。
标签: python beautifulsoup python-requests