Python3网络爬虫教程19

您所在的位置:网站首页 scrapwd Python3网络爬虫教程19

Python3网络爬虫教程19

#Python3网络爬虫教程19| 来源: 网络整理| 查看: 265

Python3网络爬虫教程19——分布式爬虫Scrapy实例(爬取多个页面) 原创

Felixzfb 2023-04-06 12:16:40 博主文章分类:网络爬虫 ©著作权

文章标签 Scrapy 分布式爬虫 ide css 内容页 文章分类 JavaScript 前端开发

©著作权归作者所有:来自51CTO博客作者Felixzfb的原创作品,请联系作者获取转载授权,否则将追究法律责任

上接: Python3网络爬虫教程18——分布式爬虫Scrapy实例(爬取一个页面)

先补充几个常用命令;

7. Scrapy项目常用命令先打开CMD命令,CD切换到要创建的项目的文件夹下 scrapy startproject(创建项目)创建项目之后切换到项目文件夹下 scrapy crawl XX(运行XX蜘蛛)scrapy shell http://www.scrapyd.cn(调试网址为http://www.scrapyd.cn的网站)scrapy version 查看版本scrapy list 这里的蜘蛛就是指spider文件夹下面xx.py文件中定义的name,你有10个py文件但是只有一个定义了蜘蛛的name,那只算一个蜘蛛比如我spider文件夹有3个xxx.py,每个里面都只定义了1个蜘蛛,输出如下D:\Hello World\python_work\TLXY_study_note\Spider\mingyan2>scrapy list ItemSpider ListSpider mingyan28. scrapy分布式爬取(爬取多个页面的多个数据)该网站为例:http://lab.scrapyd.cn查看源代码,找到下一页的连接所在位置 下一页 » 爬取思路:我们每爬一页就用css选择器来查询,是否存在下一页链接,存在:则爬取下一页链接:http://lab.scrapyd.cn/page/*/,然后把下一页链接提交给当前爬取的函数,继续爬取,继续查找下一页,直到找不到下一页,说明所有页面已经爬完,那结束爬虫。先提取下一页的连接,并判断是否有下一页连接这个这个值 next_page = response.css(‘li.next a::attr(href)’).extract_first() if next_page is not None:然后执行urljoin后我们最终next_page的网址就是http://lab.scrapyd.cn/page/2scrapy给我们提供了这么一个方法:scrapy.Request()参考实例中的详细注释参考实例NextSpider.py# 提取http://lab.scrapyd.cn中的五条名言 # 然后接着继续爬取下一页,下一页...... # 作者-语录合集命名保存 import scrapy # 定义一个mingyan类,继承Spider父类 class NextSpider(scrapy.Spider): # 定义蜘蛛名 name = 'NextSpider' start_urls = ['http://lab.scrapyd.cn'] def parse(self, response): # 提取页面中的所有的名言 mingyan = response.css('div.quote') for v in mingyan: # 提取css中text标签对应的文字内容,名言的正文 text = v.css('.text::text').extract_first() # 提取作者 author = v.css('.author::text').extract_first() # 提取标签 tags = v.css('.tags .tag::text').extract() # 数组转换为字符串 tags = ', '.join(tags) # 将爬去的内容存入文件,文件名为:编号. 作者-语录.txt filename = '%s-语录合集.txt' %(author) # 以写的方式打开文件并写入内容 with open(filename, "a+") as f: f.write(text) f.write('\n') f.write('标签: ' + tags) f.write('\n---------------\n') f.close() # 上面已经爬取保存完成了第一页的内容 # 接下来我们先判断下一页是否存在,如果存在 # 就提交给上面的parse方法继续执行,下面是提交的方法 # css选择器提取下一页链接,并判断是否有下一页这个链接 # 第一次实现时extract_first()写成了extrast_first(),未提示拼写错误 next_page = response.css('li.next a::attr(href)').extract_first() if next_page is not None: # 第二页连接是http://lab.scrapyd.cn/page/2 # 第二页连接是http://lab.scrapyd.cn/page/3 # 如果是相对路径,如:/page/1 # url.join能替我们转换为绝对路径,也就是加上我们的域名 # 执行urljoin后我们最终next_page的网址就是http://lab.scrapyd.cn/page/2 next_page = response.urljoin(next_page) ''' 接下来就是爬取下一页或是内容页的秘诀所在: scrapy给我们提供了这么一个方法:scrapy.Request() 这个方法还有许多参数,后面我们慢慢说,这里我们只使用了两个参数 一个是:我们继续爬取的链接(next_page),这里是下一页链接,当然也可以是内容页 另一个是:我们要把链接提交给哪一个函数(callback=self.parse)爬取, 这里是parse函数,也就是本函数,回到parse函数开头,然后爬取完第2页内容 同时,又提取到第3页的连接,然后,一直循环下去,直到下一页的连接不存在位置 当然,我们也可以在下面另写一个函数,比如:内容页,专门处理内容页的数据 经过这么一个函数,下一页链接又提交给了parse,那就可以不断的爬取了,直到不存在下一页 yield生成器函数,每次调用都从yield这里开始执行 ''' yield scrapy.Request(next_page, callback=self.parse)

本章案例源代码及输出结果图片查看GITHUB: https://github.com/FangbaiZhang/TLXY_study_note/tree/master/Spider

下接:Python3网络爬虫教程20——分布式爬虫爬取10000个百度百科词条

收藏 评论 分享 举报

上一篇:Python3网络爬虫教程17——分布式爬虫Scrapy基础

下一篇:Python3网络爬虫教程18——分布式爬虫Scrapy实例(爬取一个页面)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3