селен с scrapy для динамической страницы


Я пытаюсь очистить информацию о продукте с веб-страницы, используя scrapy. Моя будущая веб-страница выглядит так:

  • начинается со страницы product_list с 10 продуктов
  • щелчок по кнопке "Далее" загружает следующие 10 продуктов (url-адрес не меняется между двумя страницами)
  • Я использую LinkExtractor для перехода по каждой ссылке на страницу продукта и получения всей необходимой мне информации

Я попытался повторить next-button-ajax-call, но не может работать, поэтому я даю Селену попробовать. Я могу запустить веб-драйвер selenium в отдельном скрипте, но я не знаю, как интегрироваться с scrapy. Куда я положу селеновую часть в моего тощего паука?

мой паук довольно стандартный, например:

class ProductSpider(CrawlSpider):
    name = "product_spider"
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/shanghai']
    rules = [
        Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'),
        ]

    def parse_product(self, response):
        self.log("parsing product %s" %response.url, level=INFO)
        hxs = HtmlXPathSelector(response)
        # actual data follows

любая идея приветствуется. Спасибо!

1 53

1 ответ:

это действительно зависит от того, как вам нужно очистить сайт и как и какие данные вы хотите получить.

вот пример, как вы можете следить за разбиением на страницы на ebay с помощью Scrapy+Selenium:

import scrapy
from selenium import webdriver

class ProductSpider(scrapy.Spider):
    name = "product_spider"
    allowed_domains = ['ebay.com']
    start_urls = ['http://www.ebay.com/sch/i.html?_odkw=books&_osacat=0&_trksid=p2045573.m570.l1313.TR0.TRC0.Xpython&_nkw=python&_sacat=0&_from=R40']

    def __init__(self):
        self.driver = webdriver.Firefox()

    def parse(self, response):
        self.driver.get(response.url)

        while True:
            next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a')

            try:
                next.click()

                # get the data and write it to scrapy items
            except:
                break

        self.driver.close()

вот несколько примеров "селеновых пауков":


существует также альтернатива тому, чтобы использовать Selenium С Scrapy. В некоторых случаях, используя ScrapyJS middleware достаточно для обработки динамических частей страницы. Образец реального мира использование: