Scrapy抓取页面,但没有抓取项目

时间:2018-04-12 13:33:00

标签: python web-scraping scrapy web-crawler

这是我的蜘蛛

from scrapy import Selector
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

from Diplom.items import QuestionItem


class ConsultSpider(CrawlSpider):
    name = "consultation"
    allowed_domains = ['health.mail.ru']
    start_urls = ['https://health.mail.ru/consultation/1579497']

    rules = {
        Rule(LinkExtractor(allow=('.*\/consultation\/\d+'),), callback="parse_item", follow=True),

     }

    def parse_item(self, response):
        items = []
        root = Selector(response)
        posts = root.xpath('/html/body/div[2]/div[1]/div[5]/div/div[1]/div[1]/div[2]')
        for post in posts:
            item = QuestionItem()
            item['question'] = post.xpath(
            '//div[1]/div/div/div[2]/div[2]').extract()
            item['answer'] = post.xpath('//div[3]/div[2]/div[2]').extract()
            items.append(item)
        return items

问题是蜘蛛如规则

中所述进入链接
  

信息:抓取8页(每页8页),刮下0件(每件0件/分)

但是这并没有退回任何物品。如果我改变了类并且像这样写了

,我的代码就可以了
class ConsultSpider(scrapy.Spider):
....

但这不适用于Rule s。

1 个答案:

答案 0 :(得分:0)

scrapy.Spider是最简单的蜘蛛,它基本上会访问start_urls中定义的或start_requests()返回的URL。

当你需要"抓取时,

CrawlSpider"行为 - 提取链接并跟随它们:

这是用于抓取常规网站的最常用的蜘蛛,因为它提供了一种通过定义一组规则来跟踪链接的便捷机制。它可能不是最适合您的特定网站或项目,但它在几种情况下足够通用,因此您可以从它开始并根据需要覆盖它以获得更多自定义功能,或者只是实现您自己的蜘蛛。

通过这个" scrapy.spider"不遵守规则和" crawlspider"是遵循规则的那个,因此问题不在于那两个所以请检查你的xpath选择器。