Python Scrapy不会抓取网站

时间:2016-05-19 18:52:02

标签: python scrapy web-crawler scrapy-spider

我是python scrapy的新手并试图通过一个小例子,但是我遇到了一些问题! 我只能抓取第一个指定的网址,但我无法抓取多个网页或整个网站!

请帮助我或就如何抓取整个网站或更多页面提供一些建议......

我正在做的例子非常简单...... 我的items.py

import scrapy
    class WikiItem(scrapy.Item):
        title = scrapy.Field()

我的wikip.py(蜘蛛)

import scrapy
from wiki.items import WikiItem

class CrawlSpider(scrapy.Spider):
    name = "wikip"
    allowed_domains = ["en.wikipedia.org/wiki/"]
    start_urls = (
        'http://en.wikipedia.org/wiki/Portal:Arts',
    )

    def parse(self, response):
        for sel in response.xpath('/html'):
            item = WikiItem()
            item['title'] = sel.xpath('//h1[@id="firstHeading"]/text()').extract()
            yield item

当我在根项目目录中运行 scrapy crawl wikip -o data.csv 时,结果为:

title

Portal:Arts

任何人都可以告诉我为什么它不遵循网址并且更深入地爬行?

我已经检查了一些相关的SO问题,但他们没有帮助解决问题

1 个答案:

答案 0 :(得分:1)

scrapy.Spider 是最简单的蜘蛛。更改名称CrawlSpider,因为 Crawl Spider 是scrapy的通用蜘蛛之一。

可以使用以下选项之一:

例如:1。class WikiSpider(scrapy.Spider)

或2. class WikiSpider(CrawlSpider)

如果您使用的是第一个选项,则需要对逻辑进行编码,以便跟踪您需要在该网页上关注的链接。

对于第二种选择,您可以执行以下操作:

在开始网址后,您需要按如下方式定义规则:

rules = ( Rule(LinkExtractor(allow=('https://en.wikipedia.org/wiki/Portal:Arts\?.*?')), callback='parse_item', follow=True,), )

如果您使用CrawlSpider,请更改定义为“解析”的函数的名称。 Crawl Spider使用parse方法来实现逻辑。因此,在这里你试图覆盖解析方法,因此爬行蜘蛛不起作用。