我是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问题,但他们没有帮助解决问题
答案 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方法来实现逻辑。因此,在这里你试图覆盖解析方法,因此爬行蜘蛛不起作用。