我几乎没有网络抓取的经验,也不能用BeautifulSoup解决这个问题,所以我尝试了SelSelum(今天安装了它)。我正试着在eBay上刮掉卖出的东西。我在试着刮:
https://www.ebay.com/sch/i.html?_from=R40&_nkw=oakley+sunglasses&_sacat=0&Brand=Oakley&rt=nc&LH_Sold=1&LH_Complete=1&_ipg=200&_oaa=1&_fsrp=1&_dcat=79720
下面是我的代码,我在其中加载html代码并将其转换为Seleniumhtml:
ebay_url = 'https://www.ebay.com/sch/i.html?_from=R40&_nkw=oakley+sunglasses&_sacat=0&Brand=Oakley&rt=nc&LH_Sold=1&LH_Complete=1&_ipg=200&_oaa=1&_fsrp=1&_dcat=79720'
html = requests.get(ebay_url)
#print(html.text)
driver = wd.Chrome(executable_path=r'/Users/mburley/Downloads/chromedriver')
driver.get(ebay_url)
其在正确的URL处正确地打开新的Chrome会话。我正在努力获得标题,价格和销售日期,然后加载到一个CSV文件。以下是我对这些问题的代码:
# Find all div tags and set equal to main_data
all_items = driver.find_elements_by_class_name("s-item__info clearfix")[1:]
#print(main_data)
# Loop over main_data to extract div classes for title, price, and date
for item in all_items:
date = item.find_element_by_xpath("//span[contains(@class, 'POSITIVE']").text.strip()
title = item.find_element_by_xpath("//h3[contains(@class, 's-item__title s-item__title--has-tags']").text.strip()
price = item.find_element_by_xpath("//span[contains(@class, 's-item__price']").text.strip()
print('title:', title)
print('price:', price)
print('date:', date)
print('---')
data.append( [title, price, date] )
它只返回[]。我认为eBay可能屏蔽了我的IP,但加载的html代码看起来是正确的。希望有人能帮忙!谢谢!
2条答案
按热度按时间gzjq41n41#
没有必要使用
Selenium
进行eBay抓取,因为数据不是由JavaScript呈现的,因此可以从普通的HTML中提取。使用BeautifulSoup
Web抓取库就足够了。请记住,当您多次尝试请求某个站点时,可能会出现站点解析问题。EBay可能会认为这是一个发送请求的机器人(不是真正的用户)。
为了避免这种情况,其中一种方法是发送请求中包含用户代理的
headers
,然后站点将假定您是用户并显示信息。作为额外的步骤是轮换这些用户代理。理想的情况是将代理与轮换的用户代理组合使用(除了验证码解算器)
输出示例
作为替代,您可以使用SerpApi中的Ebay Organic Results API。这是一个付费的API,有一个免费的计划,可以在后端处理块和解析。
对所有页面进行分页的示例代码:
产出:
免责声明我为SerpApi工作。
vcirk6k62#
您可以使用下面的代码来获取详细信息。此外,您还可以使用Pandas将数据存储在CSV文件中。
代码:
进口: