selen ze scrapami do dynamicznej strony
Próbuję zeskrobać informacje o produkcie ze strony internetowej, używając Scrappy. Moja przyszła strona wygląda tak:
- zaczyna się od strony product_list z 10 produktami
- kliknięcie przycisku "Dalej" ładuje następne 10 produktów (adres url nie zmienia się między dwiema stronami)
- używam LinkExtractor, aby śledzić każdy link do produktu na stronie produktu i uzyskać wszystkie potrzebne informacje
Próbowałem odtworzyć next-button-ajax-call, ale nie mogę się uruchomić, więc spróbuję selenu. Mogę uruchomić webdriver selenium w osobnym skrypcie, ale nie wiem jak zintegrować ze scrapem. Gdzie mam włożyć selen do mojego Scrappy spider?
Mój pająk jest dość standardowy, jak poniżej:
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
Każdy pomysł jest doceniany. Dziękuję! 1 answers
To naprawdę zależy od tego, jak trzeba zeskrobać stronę i jak i jakie dane chcesz uzyskać.
Oto przykład, jak można śledzić paginacji na ebay za pomocą 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()
Oto kilka przykładów "pająków selenowych":
- wykonywanie funkcji formularza zgłoszenia Javascript przy użyciu Scrappy w python
- https://gist.github.com/cheekybastard/4944914
- https://gist.github.com/irfani/1045108
- http://snipplr.com/view/66998/
Istnieje również alternatywa dla konieczności używania Selenium
z Scrapy
. W niektórych przypadkach za pomocą ScrapyJS
middleware jest wystarczające do obsługi dynamicznych części strony. Przykładowe użycie w świecie rzeczywistym:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:02