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架构处理流程为:
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:Request url错误
我们发现,在parse_start_url方法生成Request时,url有错误,request url缺少scheme,也就是说缺少了域名主机。我们来看一下网页结构中的“下一页”:
下一页链接
原来是下一页的链接没有域名,那我们给他加上域名,如:
下一页链接加上域名
再运行,发现执行正常:
执行正常
我们到MongoDB中看一下数据:
结果
比较满意,数据都出来了。
不过,我们发现这个id是MongoDB自生成的id,我们分析网页结构后,看到,每个段子其实都有一个id,更改代码如下,加上了从段子链接中提取id的步骤:
id提取
再次执行,查看结果:
id
段子id不再是MongoDB自生成的id了,是糗百内部的段子的id。大功告成。
下一篇文章使用CrawlSpider和其中的Rule、LinkExtractor全站爬取糗百段子,代码会更简洁,敬请关注。
更多文章-
Python爬虫框架Scrapy之爬取糗事百科大量段子数据
-
Python爬虫框架之Scrapy详解
-
Java网络爬虫工具,OkHttp完全详细用法