我试着用Jupeter Notebook从亚马逊上爬取评论数据。
但是有来自服务器的响应503。
有人知道它出了什么问题吗?
这里是网址https://www.amazon.com/Apple-MWP22AM-A-AirPods-Pro/product-reviews/B07ZPC9QD4/ref=cm_cr_arp_d_paging_btm_next_2?ie=UTF8&reviewerType=all_reviews&pageNumber=
这是我的代码。
import re, requests, csv
from bs4 import BeautifulSoup
from time import sleep
def reviews_info(div):
review_text = div.find("div", "a-row a-spacing-small review-data").get_text()
review_author = div.find("span", "a-profile-name").get_text()
review_stars = div.find("span", "a-icon-alt").get_text()
on_review_date = div.find('span', 'a-size-base a-color-secondary review-date').get_text()
review_date = [x.strip() for x in re.sub("on ", "", on_review_date).split(",")]
return { "review_text" : review_text,
"review_author" : review_author,
"review_stars" : review_stars,
"review_date": review_date }
base_url = 'https://www.amazon.com/Apple-MWP22AM-A-AirPods-Pro/product-reviews/B07ZPC9QD4/ref=cm_cr_arp_d_paging_btm_next_2?ie=UTF8&reviewerType=all_reviews&pageNumber='
reviews = []
NUM_PAGES = 8
for page_num in range(1, NUM_PAGES + 1):
print("souping page", page_num, ",", len(reviews), "data collected")
url = base_url + str(page_num)
soup = BeautifulSoup(requests.get(url).text, 'lxml')
for div in soup('div', 'a-section review'):
reviews.append(reviews_info(div))
sleep(30)
最后我试了
requests.get(url)
输出为
<Response [503]>
我也试过
requests.get(url).text()
输出为
TypeError: 'str' object is not callable
Amazon是否阻止了爬网?
我很感激你的回答!
3条答案
按热度按时间8oomwypt1#
当你试图抓取请求时,Amazon会使用python request lib来阻止你对他们服务器的请求。你可以尝试使用Selenium和chromium浏览器来实现这个功能。这里是Python版本的Selenium:https://selenium-python.readthedocs.io/.
b91juud32#
我试过webdriver。
这是我的代码。
0dxa2lsx3#
一个比selenium/webdriver更快的解决方案是使用代理,但成本更高。我使用proxycrawl--除了作为客户之外,我与他们没有任何关系。我还推荐使用Scrapy这样的抓取框架。它将有助于避免使用请求之间的可变时间和其他功能进行检测。
你支付每成功刮-你不收取不成功刮。这是最便宜的代理解决方案,我发现。
您可以这样使用它: