селен с 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 ответ:
это действительно зависит от того, как вам нужно очистить сайт и как и какие данные вы хотите получить.
вот пример, как вы можете следить за разбиением на страницы на 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()
вот несколько примеров "селеновых пауков":
- выполнение функций формы отправки Javascript с помощью scrapy in питон
- https://gist.github.com/cheekybastard/4944914
- https://gist.github.com/irfani/1045108
- http://snipplr.com/view/66998/
существует также альтернатива тому, чтобы использовать
Selenium
СScrapy
. В некоторых случаях, используяScrapyJS
middleware достаточно для обработки динамических частей страницы. Образец реального мира использование: