Bs4选择器:使用美丽的汤刮亚马逊

时间:2018-06-08 10:50:45

标签: python web-scraping beautifulsoup

我正在尝试使用这些框架来抓取一个链接到亚马逊的网站 - 硒,美丽的汤。

我的目标是抓住以下亚马逊产品的详细信息 - >  标题,价格,描述,第一次审查

但是我很难与美丽的选择器我尝试了很多组合,但我得到一个空输出或错误,不幸的是不那么专业。 主要问题是美丽的汤没有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选择器在这里没有帮助。

4 个答案:

答案 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。