selenium与scrapydynamic页面

我试图从网页上刮取产品信息,使用scrapy。 我的被​​刮的网页看起来像这样:

  • 从10个产品的product_list页面开始
  • 点击“下一步”button加载下面的10个产品(url在两页之间不会改变)
  • 我使用LinkExtractor来跟踪每个产品链接到产品页面,并获得所有我需要的信息

我试图复制next-button-ajax-call,但无法正常工作,所以我给selenium一个尝试。 我可以在一个单独的脚本中运行selenium的webdriver,但我不知道如何与scrapy集成。 我应该在哪里把selenium元素放入我的蜘蛛蛛?

我的蜘蛛是相当标准的,如下所示:

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 

任何想法是赞赏。 谢谢!

这真的取决于你如何需要刮去网站,以及如何以及你想获得什么数据。

下面是一个例子,您可以使用Scrapy + Selenium在ebay上关注分页:

 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蜘蛛”的例子:


还有一个替代scheme是使用Scrapy来使用Selenium 。 在某些情况下,使用ScrapyJS中间件足以处理页面的dynamic部分。 示例真实世界的用法

  • 使用python-Scrapy刮取dynamic内容

此代码将请求两次的URL

  • 一个是Scrapy,另一个是selenium web驱动
  • 如果你的目标网站有反垃圾邮件JavaScript,你会被检测为networking机器人,因为scrapy本身不能处理javascript。

通过添加中间件将Scrapy与Selenium集成

在stackoverflow上检查这个