我正在尝试使用这些框架来抓取一个链接到亚马逊的网站 - 硒,美丽的汤。
我的目标是抓住以下亚马逊产品的详细信息 - > 标题,价格,描述,第一次审查
但是我很难与美丽的选择器我尝试了很多组合,但我得到一个空输出或错误,不幸的是不那么专业。 主要问题是美丽的汤没有XPath选择器(AFAIK)。 我是否应该接受scrapy来完成这项任务,或者对于这个简单的刮刀来说,scrapy是否过于庞大?
这是我将在稍后重复的第一个产品
from bs4 import BeautifulSoup
from selenium import webdriver
import time
driver.get('https://www.example.com')
driver.get('https://www.example.com')
first_article = driver.find_element_by_css_selector('div.button')
first_article.click()
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
# perform the operation
之后,我必须选择相应的路径,但如何做到这一点? 在Xpath中是这样的,
Title = '//h1[@id="title"]//text()'
Price = '//span[contains(@id,"ourprice") or contains(@id,"saleprice")]/text()'
Category = //a[@class="a-link-normal a-color-tertiary"]//text()'
但是产品细节和第一次审查的路径我还不能。我认为美丽的汤find_all选择器在这里没有帮助。
答案 0 :(得分:0)
尝试使用它支持xpath选择器的selenium。 driver.find_element_by_xpath(标题)#Eamples
答案 1 :(得分:0)
你可以只使用BeautifulSoup,它并不是很难,如果你有兴趣,我认为有这样的api。
经常使用Selenium来点击按钮,这可能会降低你的程序速度,因为每次点击按钮你都需要等待加载页面,而你需要做什么,你必须有速度,因为,它有很多链接:D。
关于BeautifulSoup的文档很好: http://www.pythonforbeginners.com/beautifulsoup/beautifulsoup-4-python
python的好Api: aws.amazon.com/python
答案 2 :(得分:0)
如果您的目的只是抓取网站,请使用BeautifulSoup。 与使用Selenium相比,这将节省一些执行时间和额外的代码行。
BeautifulSoup有一个名为findNext的函数来自当前元素导向的childern,所以:
尝试这样的事情 -
import bs4
import requests
res = requests.get(url)
soup = bs4.BeautifulSoup(self.res.text, "lxml") #lxlm parser
text = soup.findNext('div',{'class':'class_value'}).findNext('div',{'id':'id_value'}).findAll('a')
这类似于xpath -
div[class=class_value]/div[id=id_value]
答案 3 :(得分:0)
Amazon拥有反刮擦机制,如果它检测到刮擦,它将在刮板上使用验证码,因此您的问题是它返回了用于验证码的html,而您却找不到任何东西。
刮取亚马逊的唯一可靠方法是使用无头版本的Selenium。