Scrapy学习第六课
Posted helenandyoyo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy学习第六课相关的知识,希望对你有一定的参考价值。
python爬虫框架scrapy学习第六课
知识点:start_requests()
-
函数解释:该方法必须返回一个可迭代对象(iterable)。该对象包含了spider用于爬取的第一个Request。当spider启动爬取并且未制定URL时,该方法被调用。 当指定了URL时,make_requests_from_url() 将被调用来创建Request对象。 该方法仅仅会被Scrapy调用一次,因此您可以将其实现为生成器。该方法的默认实现是使用 start_urls 的url生成Request。
-
源码分析:针对start_urls中的每一个url 发起resquest请求。当start_urls中有多个链接时,逐步发起请求。
def start_requests(self):
for url in self.start_urls:
yield self.make_requests_from_url(url)
def make_requests_from_url(self, url):
return Request(url, dont_filter=True)
- 代码演示:
– 不显示引用start_requests展示爬取顺序和爬取结果
import scrapy
class KrSpider(scrapy.Spider):
name = 'kr'
allowed_domains = ['ifeng.com']
start_urls = [
'http://news.ifeng.com/a/20181225/60208881_0.shtml',
'http://news.ifeng.com/a/20181225/60208818_0.shtml',
'http://news.ifeng.com/a/20181225/60208776_0.shtml'
]
def parse(self, response):
filename = "test.html"
title = response.xpath('//h1[@id="artical_topic"]/text()').extract()
print(title)
start_urls中包含3个url,按照函数释义,会按照顺序逐步被调用爬取数据,观其结果可知,顺序和结果是正确的。
–修改start_requests的内容,通过爬虫结果,证实该函数在发起爬取过程中被调用
import scrapy
class KrSpider(scrapy.Spider):
name = 'kr'
allowed_domains = ['ifeng.com']
start_urls = [
'http://news.ifeng.com/a/20181225/60208881_0.shtml',
'http://news.ifeng.com/a/20181225/60208818_0.shtml',
'http://news.ifeng.com/a/20181225/60208776_0.shtml'
]
def start_requests(self):
yield scrapy.Request(url=self.start_urls[0], callback=self.parse)
def parse(self, response):
filename = "test.html"
title = response.xpath('//h1[@id="artical_topic"]/text()').extract()
print(title)
从结果中可知,显示的start_requests函数被调用,覆盖原有的功能。
- 代码修改:get变post…该功能暂未学习,后续补充。
以上是关于Scrapy学习第六课的主要内容,如果未能解决你的问题,请参考以下文章