Скребок Amazon

Я пытаюсь очистить цены Amazon с помощью phantomjs и python. Я хочу разобрать его с красивым супом, чтобы получить новые и подержанные цены на книги, проблема в том, что когда я передаю источник запроса, который я делаю с фантомами, цены всего 0,00, код – это простой тест.

Я новичок в веб-соскабливании, но я не понимаю, есть ли amazon, у кого есть меры, чтобы избежать скремблирования цен, или я делаю это неправильно, потому что я пытался с другими более простыми страницами, и я могу получить нужные данные.

PD Я в стране, не поддерживаемой для использования API amazon, поэтому скребок необходим

import re import urlparse from selenium import webdriver from bs4 import BeautifulSoup from time import sleep link = 'http://www.amazon.com/gp/offer-listing/1119998956/ref=dp_olp_new?ie=UTF8&condition=new'#'http://www.amazon.com/gp/product/1119998956' class AmzonScraper(object): def __init__(self): self.driver = webdriver.PhantomJS() self.driver.set_window_size(1120, 550) def scrape_prices(self): self.driver.get(link) s = BeautifulSoup(self.driver.page_source) return s def scrape(self): source = self.scrape_prices() print source self.driver.quit() if __name__ == '__main__': scraper = TaleoJobScraper() scraper.scrape() 

2 Solutions collect form web for “Скребок Amazon”

Прежде всего, чтобы следовать комментарию @Nick Bailey, изучите Условия использования и убедитесь, что на вашей стороне нет нарушений.

Чтобы решить эту проблему, вам необходимо настроить нужные возможности PhantomJS :

 caps = webdriver.DesiredCapabilities.PHANTOMJS caps["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 (KHTML, like Gecko) Chrome/15.0.87" self.driver = webdriver.PhantomJS(desired_capabilities=caps) self.driver.maximize_window() 

И, чтобы сделать его пуленепробиваемым , вы можете сделать пользовательское ожидаемое условие и дождаться, когда цена станет ненулевой :

 from selenium.common.exceptions import StaleElementReferenceException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class wait_for_price(object): def __init__(self, locator): self.locator = locator def __call__(self, driver): try : element_text = EC._find_element(driver, self.locator).text.strip() return element_text != "0,00" except StaleElementReferenceException: return False 

Применение:

 def scrape_prices(self): self.driver.get(link) WebDriverWait(self.driver, 200).until(wait_for_price((By.CLASS_NAME, "olpOfferPrice"))) s = BeautifulSoup(self.driver.page_source) return s 

Хороший ответ на настройку пользовательского агента для phantomjs на обычный браузер. Поскольку вы сказали, что ваша страна заблокирована амазоном, я бы предположил, что вам также нужно установить прокси.

вот пример того, как запустить phantomJS в python с помощью useragent и прокси-сервера firefox.

 from selenium.webdriver import * from selenium.webdriver.common.desired_capabilities import DesiredCapabilities service_args = [ '--proxy=1.1.1.1:port', '--proxy-auth=username:pass' ] dcap = dict( DesiredCapabilities.PHANTOMJS ) dcap["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" driver = PhantomJS( desired_capabilities = dcap, service_args=service_args ) 

где 1.1.1.1 – ваш прокси-сервер, а порт – прокси-порт. Также имя пользователя и пароль необходимы только в том случае, если ваш прокси требует аутентификации.

  • Как прочитать файл, загруженный selenium webdriver в python
  • Лучший способ интегрировать код Python с HTML
  • Как получить Github Webhooks в Python
  • Запись всех кликов и взаимодействий на моем веб-сайте
  • щелчок по ссылке через selenium в python
  • Необходимо очистить информацию с веб-страницы с помощью кнопки «показать больше», каких-либо рекомендаций?
  • Веб-сервер Django зависает после запуска демона
  • Как очистить эту веб-страницу с помощью Python и lxml? пустой список возвращен
  • Python - лучший язык программирования в мире.