如何使用Scrapy和Selenium对链接列表中的项目进行爬网

时间:2015-07-22 19:50:45

标签: python selenium hyperlink web-crawler scrapy

请帮助我纠正这个脚本:我有一个链接搜索结果列表,我想浏览并抓取每个链接。
但是这个脚本只点击了第一个链接,然后我的抓取工具停止了 任何帮助表示赞赏 代码“蜘蛛”:

    from scrapy.contrib.spiders import CrawlSpider
    from scrapy import Selector
    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    from time import sleep
    import selenium.webdriver.support.ui as ui
    from scrapy.xlib.pydispatch import dispatcher
    from scrapy.http import HtmlResponse, TextResponse
    from extraction.items import ProduitItem
    from scrapy import log

    class RunnerSpider(CrawlSpider):
       name = 'products_d'
       allowed_domains = ['amazon.com']
       start_urls = ['http://www.amazon.com']

       def __init__(self):
           self.driver = webdriver.Firefox()
       def parse(self, response):

         sel = Selector(response)
         self.driver.get(response.url)
         recherche = self.driver.find_element_by_xpath('//*[@id="twotabsearchtextbox"]')
         recherche.send_keys("A")
         recherche.submit()

         resultat = self.driver.find_element_by_xpath('//ul[@id="s-results-list-atf"]')
         #Links
         resultas = resultat.find_elements_by_xpath('//li/div[@class="s-item-container"]/div/div/div[2]/div[1]/a')
         links = []
         for lien in resultas:
            l = lien.get_attribute('href')
            links.append(l)
         for result in links:
           item = ProduitItem()
           link = result
           self.driver.get(link)
           item['URL'] = link
           item['Title'] = self.driver.find_element_by_xpath('//h1[@id="aiv-content-title"]').text                     
           yield item

         self.driver.close()

1 个答案:

答案 0 :(得分:1)

因此您的脚本存在一些问题。

1)您的parse函数会覆盖CrawlSpider对同一函数的实现。这意味着没有调用CrawlSpider的默认行为,负责从页面中提取链接以继续抓取。使用CrawlSpider时不建议这样做。有关详细信息,请参见此处:

http://doc.scrapy.org/en/latest/topics/spiders.html

2)您自己不会产生任何后续网址。您只会产生物品。如果您希望Scrapy继续处理URL,则必须在项目旁边生成某种形式的Request对象。

3)你在解析函数结束时杀死了Selenium的驱动程序。无论如何,这可能会导致它在后续通话中失败。没有必要这样做。

4)你正在使用Selenium& Scrapy的URL同时抓取。这不一定是错的,但请记住,这可能会导致一些不稳定的行为。

5)您的脚本缩进肯定是关闭的,这使您很难查看代码。