快捷搜索:  汽车  科技

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)说明一下,如果我们在继承CrawlSpider,不要去覆盖parse方法,因为CrawlSpider使用了parse进行了其内部的流程处理,开放了parse_start_url方法供我们实现。如果我们实现了parse方法,很可能会造成CrawlSpider不能正常工作。这里,跟昨天有点不一样,CrawlSpider比Spider更适合爬取规则的网站。我们把继承Spider改成了CrawlSpider,然后parse方法改成了parse_start_url方法。其次,调度器(Scheduler)接收到Request之后,会调度所有Request,通过下载器中间件(Downloader Middlewares)把其交给下载器(Downloader)处理。再次,下载器(Downloader)接收到Request之后,发送HTTP请求,获取到相应之后,封装成Response对象,通过爬虫中间件(S

根据上篇文章《Python爬虫框架scrapy之爬取糗事百科大量段子数据》(传送门:Python爬虫框架Scrapy之爬取糗事百科大量段子数据),写好了糗百段子的爬虫,接下来就是开始运行然后获取结果了。

scrapy架构

这里再描述一下scrapy处理的架构,全网比较流行的scrapy架构处理流程为:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(1)

scrapy架构

首先,scrapy引擎根据start_urls中的url生成相应的Request,然后把这些Request通过调度器中间件(Scheduler Middlewares)交给调度器(Scheduler)处理。

其次,调度器(Scheduler)接收到Request之后,会调度所有Request,通过下载器中间件(Downloader Middlewares)把其交给下载器(Downloader)处理。

再次,下载器(Downloader)接收到Request之后,发送HTTP请求,获取到相应之后,封装成Response对象,通过爬虫中间件(Spider Middlewares)交给爬虫Spider处理。这个时候的Spider一般是我们自己实现的Spider。

糗百爬虫

这里,跟昨天有点不一样,CrawlSpider比Spider更适合爬取规则的网站。我们把继承Spider改成了CrawlSpider,然后parse方法改成了parse_start_url方法。

说明一下,如果我们在继承CrawlSpider,不要去覆盖parse方法,因为CrawlSpider使用了parse进行了其内部的流程处理,开放了parse_start_url方法供我们实现。如果我们实现了parse方法,很可能会造成CrawlSpider不能正常工作。

然后我们在命令行执行:

scrapy crawl qiubai

运行错误汇总错误1:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(2)

Request url错误

我们发现,在parse_start_url方法生成Request时,url有错误,request url缺少scheme,也就是说缺少了域名主机。我们来看一下网页结构中的“下一页”:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(3)

下一页链接

原来是下一页的链接没有域名,那我们给他加上域名,如:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(4)

下一页链接加上域名

再运行,发现执行正常:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(5)

执行正常

我们到MongoDB中看一下数据:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(6)

结果

比较满意,数据都出来了。

不过,我们发现这个id是MongoDB自生成的id,我们分析网页结构后,看到,每个段子其实都有一个id,更改代码如下,加上了从段子链接中提取id的步骤:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(7)

id提取

再次执行,查看结果:

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(8)

id

段子id不再是MongoDB自生成的id了,是糗百内部的段子的id。大功告成。

下一篇文章使用CrawlSpider和其中的Rule、LinkExtractor全站爬取糗百段子,代码会更简洁,敬请关注。

更多文章
  1. Python爬虫框架Scrapy之爬取糗事百科大量段子数据

  2. Python爬虫框架之Scrapy详解

  3. Java网络爬虫工具,OkHttp完全详细用法

python爬网验证码在哪里(Python爬虫框架Scrapy架构和爬取糗事百科段子结果)(9)

猜您喜欢: