Скребок 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
  • Django не может найти статические файлы. Нужна вторая пара глаз, я схожу с ума
  • Выдержка из динамического ответа JSON с помощью Scrapy
  • Использование urllib и BeautifulSoup для извлечения информации из Интернета с помощью Python
  • Python-Requests (> = 1. *): Как отключить keep-alive?
  • python urllib2 document.login
  • scrapy xpath селектор повторяет данные
  • Кодировка HTML и анализ lxml
  • Запуск Scrapy из представления Django
  •  
    Interesting Posts for Van-Lav

    Путь Python с не-латинским-1 PYTHONHOME

    python читает файл, сохраняет новый столбец для каждого объявления линии, сохраняя тот же файл

    Virtualenv: невозможно создать virtualenv: IOError: Нет такого файла или каталога: 'python'

    Matlab / Octave bwdist () в Python или C

    Построение точек данных из трех кортежей на графике поверхности / контура с использованием matplotlib

    Создайте новый DataFrame из существующего с столбцом, содержащим список (заполните новые строки, используя список)

    Как регистрировать исключение на предупреждающем или информационном уровне с помощью трассировки, используя фреймворк python?

    Написание диспетчера контекстов в Python, который сам использует оператор with

    Вставить встроенное изображение в сообщение Lotus Notes

    У меня возникают проблемы с wtforms selectfields, когда я использую POST с Flask

    копировать / вырезать / вставлять функции в мою программу типа «блокнот»

    Python: открыть файл, выполнить поиск, а затем добавить, если не существует.

    Обновление Homebrew до Python 2.7.10_2 приводит к сбою пакетов с «не найденным изображением»,

    как установить numpy и pandas на windows

    Создать javascript-объект (класс) из модели django

    Python - лучший язык программирования в мире.