Селекторы Bs4: очистите Amazon с помощью Beautiful Soup - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь очистить сайт, который имеет ссылки на Amazon с Python, используя эти фреймворки - селен, красивый суп.

Моя цель - очистить следующие детали продуктов Amazon -> Название, Цена, Описание, Первый обзор

Но мне трудно работать с селекторами Beautiful. Я перепробовал много комбинаций, но либо получаю нулевой вывод, либо Error, к сожалению, не так Pro.Основная проблема заключается в том, что Beautiful soup не имеет селекторов XPath (AFAIK).Должен ли я перейти к scrapy для этой задачи, или scraping слишком много для этого простого скребка?

Это для первого продукта, который я повторю позже

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()'

Но подробностей о товаре и пути к первому обзору только я пока не могу.Я думаю, что селекторы Beautiful Soup find_all здесь не помогут.

Ответы [ 4 ]

0 голосов
/ 29 мая 2019

В Amazon есть механизмы предотвращения соскоба, которые, если он обнаружит соскребание, будут использовать капчу на скребке, поэтому ваша проблема в том, что он возвращает html для капчи, и вы ничего не находите.

Единственным надежным способом очистки амазонки будет использование безголовой версии Selenium.

0 голосов
/ 08 июня 2018

Вы можете просто использовать BeautifulSoup для этого, это не очень сложно, и если вам интересно, я думаю, что есть API для этого.

Селен чаще используется для нажатия кнопок, и это может замедлитьваша программа, потому что для каждого нажатия кнопки вам нужно будет дождаться загрузки страницы, и для того, что вам нужно сделать, вы должны иметь скорость, потому что это много ссылок: D.

Есть хорошийДокументация о BeautifulSoup: http://www.pythonforbeginners.com/beautifulsoup/beautifulsoup-4-python

Хороший API для python: aws.amazon.com/python

0 голосов
/ 08 июня 2018

Если ваша цель - просто очистить сайт, используйте BeautifulSoup.Это сэкономит вам некоторое время выполнения и лишние строки кода по сравнению с использованием Selenium.

BeautifulSoup имеет функцию с именем findNext из текущего элемента, направленного на детей, так:

Попробуйте что-то вроде этого -

    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]
0 голосов
/ 08 июня 2018

Попробуйте использовать селен, он поддерживает селекторы xpath.driver.find_element_by_xpath (Title) # Пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...