[英]Multiple inheritance in scrapy spiders
是否有可能創建一個繼承兩個基本蜘蛛功能的蜘蛛,即SitemapSpider和CrawlSpider?
我一直試圖從各個站點抓取數據並意識到並非所有站點都有網站上每個頁面的列表,因此需要使用CrawlSpider。 但是CrawlSpider經歷了很多垃圾頁面並且有點過分。
我想做的是這樣的事情:
啟動我的Spider,它是SitemapSpider的子類,並將正則表達式匹配的響應傳遞給parse_products以提取有用的信息方法。
轉到與產品頁面匹配正則表達式:/ reviews /的鏈接,並將數據發送到parse_review函數。
注意: “/ reviews /”類型頁面未在站點地圖中列出
從/ reviews / page中提取信息
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.