簡體   English   中英

scrapy蜘蛛的多重遺傳

[英]Multiple inheritance in scrapy spiders

是否有可能創建一個繼承兩個基本蜘蛛功能的蜘蛛,即SitemapSpider和CrawlSpider?

我一直試圖從各個站點抓取數據並意識到並非所有站點都有網站上每個頁面的列表,因此需要使用CrawlSpider。 但是CrawlSpider經歷了很多垃圾頁面並且有點過分。

我想做的是這樣的事情:

  1. 啟動我的Spider,它是SitemapSpider的子類,並將正則表達式匹配的響應傳遞給parse_products以提取有用的信息方法。

  2. 轉到與產品頁面匹配正則表達式:/ reviews /的鏈接,並將數據發送到parse_review函數。
    注意: “/ reviews /”類型頁面未在站點地圖中列出

  3. 從/ reviews / page中提取信息

  4. CrawlSpider基本上用於遞歸爬行和抓取

- - - -額外細節 - - - -

該網站是www.flipkart.com該網站有很多產品的列表,每個頁面都有自己的詳細頁面。 與詳細信息頁面一起,它們是產品的相應“評論”頁面。 審核頁面的鏈接也可在產品詳細信息頁面上找到。

注意:檢查頁面未在站點地圖上列出。

class WebCrawler(SitemapSpider, CrawlSpider):
    name = "flipkart"
    allowed_domains = ['flipkart.com']
    sitemap_urls = ['http://www.flipkart.com/robots.txt']
    sitemap_rules = [(regex('/(.*?)/p/(.*?)'), 'parse_product')]
    start_urls = ['http://www.flipkart.com/']
    rules = [Rule(LinkExtractor(allow=['/(.*?)/product-reviews/(.*?)']), 'parse_reviews'),
             Rule(LinkExtractor(restrict_xpaths='//div[@class="fk-navigation fk-text-center tmargin10"]'), follow=True)]

    def parse_product(self, response):
        loader = FlipkartItemLoader(response=response)
        loader.add_value('pid', 'value of pid')
        loader.add_xpath('name', 'xpath to name')
        yield loader.load_item()

    def parse_reviews(self, response):
        loader = ReviewItemLoader(response=response)
        loader.add_value('pid','value of pid')
        loader.add_xpath('review_title', 'xpath to review title')
        loader.add_xpath('review_text', 'xpath to review text')
        yield loader.load_item()

你是在正確的軌道上,唯一剩下的就是你的parse_product函數的末尾,你必須得到爬蟲提取的所有網址,就像這樣

def parse_product(self, response):
    loader = FlipkartItemLoader(response=response)
    loader.add_value('pid', 'value of pid')
    loader.add_xpath('name', 'xpath to name')
    yield loader.load_item()

    # CrawlSpider defines this method to return all scraped urls.
    yield from self.parse(response)

如果您沒有語法的yield from那么只需使用

for req in self.parse(response):
    yield req

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM