我尝试了网页抓取与美丽的汤和请求通过以下Youtube视频一切顺利,直到我降落与这个错误,但它的导师工作。
import requests
from bs4 import BeautifulSoup
def get_data(url):
if not response.ok:
print('Server Responded: {}'.format(response.status_code))
else:
soup = BeautifulSoup(response.text, 'lxml')
return(soup)
def get_detail_data(soup):
try:
title = soup.find('h1', id='itemTitle').text.strip()
except:
title = ''
try:
p = soup.find('span', id='prcIsum').text.strip()
currency, price = p.split(' ')
except:
currency = ''
price = ''
try:
sold = soup.find('span', class_='vi-qtyS-hot-red').a.text.strip().split(' ')[0]
except:
sold = ''
data = {
'title' : title,
'currency' : currency,
'price' : price,
'total units sold' : sold
}
return data
def get_index_data(soup):
try:
links = soup.find_all('a', class_='s-item__link')
except:
links = []
urls = [item.get('href') for item in links]
return urls
def main():
url = 'https://www.ebay.com/sch/i.html?_nkw=mens+shoes&_sacat=0'
products = get_index_data(get_data(url))
for link in products:
data = get_detail_data(get_data(link))
if __name__ == '__main__':
main()
2条答案
按热度按时间n53p2ov01#
在get_data中,你缺少了发出实际请求和存储响应的过程。如果response.ok不为True,则需要赋值soup = None。最后,在其他地方,在尝试调用soup上的方法之前,您需要测试soup是否为None。
vltsax252#
其中一个原因可能是请求被阻止,如果使用
requests
作为requests
库中的默认user-agent
是python-requests
。额外的步骤可以是旋转
user-agent
,例如,以在PC、移动的和平板电脑之间切换,以及在浏览器之间切换,例如,Chrome、Firefox、Safari、Edge等。可以使用一个while循环和基于非令牌的分页来从网站的所有页面收集数据,而不管页面的数量。
在online IDE中检查代码的分页。
示例输出:
你也可以使用SerpApi的Ebay Organic Results API。这是一个付费的API,有一个免费的计划,可以在后端处理块和解析。
带分页的示例代码:
输出:
如果你想了解更多关于网站抓取的信息,可以阅读13 ways to scrape any public data from any website博客文章。