基于scrapy框架的爬虫基本步骤(爬虫 框架)
ccwgpt 2024-09-27 07:29 143 浏览 0 评论
本文以爬取网站:www.mxp7.com为例
1.安装scrapy框架
详细教程可以 点此跳转
2.新建scrapy项目
生成一个爬虫文件。在指定的目录打开cmd.exe文件,输入代码
scrapy startproject mxp7
cd mxp7
scrapy genspider sp mxp7.com
然后通过Pycharm打开我们新建的项目,可以发现所有文件都已经新建好了,我们只需要在文件里修改好代码,就可以在命令行中爬取数据了。
3.提取数据
先点击开一个网页,查看博客的基本框架,然后我们在sp.py,我们的爬虫文件里面新建item字典,通过xpath提取出博客的各项内容。
注:在这里强调一个与xpath有关的坑。笔者起初获取网页标签内容时,喜欢在浏览器调试目录下复制xpath
比如像上图一样复制title的xpath,获得的xpath内容如下,他会按照标签的顺序提取xpath
/html/body/div[2]/div[1]/section[1]/main/article/header/h1
然而这种情况只针对于静态网页,因为动态网页中某些信息是通过代码动态加载出来的,我们复制的xpath就是动态加载后的目录,但在爬取数据的时,爬虫是不会加载动态界面的,它只爬取response内容下的原始代码。如果想让爬虫通过标签顺序获取网页内容,那必须对照着response下的代码,一般来说计算起来相当麻烦。
如何打开网页的Response
打开目标网页,点击F12进入浏览器调试,选择Network后,按F5刷新,界面下方就会出现该网页调用的文件,选择当前网址的同名文件,再在右边点击顶部菜单"Response",我们就可以查看response的内容了
话说回来,在浏览器调试界面我们还可以通过检索id获取xpath
获取内容如下:
//*[@id="post-331"]/header/h1
会发现id与网站分页的编号相同,这意味着每个网页该标签的id都是不同的,我们就不能通过id抽象出所有网页xpath的路径,因此笔者在这里更推荐大家通过css的xpath提取路径。我们写好xpath内容之后,获得的sp.py的源代码如下所示:
# sp.py源码
import scrapy
class SpSpider(scrapy.Spider):
name = 'sp'
allowed_domains = ['mxp7.com']
start_urls = ['http://mxp7.com/331/']
def parse(self, response):
item = {}
item["date"] = response.xpath("//span[@class ='meta-date']//time/text()").extract_first()
item["category"] = response.xpath("//span[@class = 'meta-category']//a/text()").extract_first()
item["title"] = response.xpath("//h1[@class = 'entry-title']/text()").extract_first()
item["author"] = response.xpath("//span[@class = 'meta-author']//a/text()").extract_first()
contain_path = response.xpath("//div[@class = 'entry-content clearfix']")
item["contain"] = contain_path.xpath("string(.)").extract_first()
print(item)
yield item
在这里我们就把数据抛给了pipelines,然后我们就可以在pipelines里面处理数据,笔者选择在这里将传送过来的数据输出到命令行
# pipelines.py源码
class Mxp7Pipeline:
def process_item(self, item, spider):
print(item)
return item
pipelines数据处理完毕后,我们还需要在setting.py里面打开pipelines
找到这段代码将其取消注释,这段代码调用了我们pipelines里面的函数,后面的300指的是该函数的权重,这个权重会在并行pipelines里面决定数据处理的优先级。
将这里处理完毕后,我们在 D:\Project\Spider\mxp7>路径下可以进行我们的抓取了,输入命令行
scrapy crawl sp
然后会发现我们抓取的数据藏在了一大堆日志文件里面,为了视觉上的感受,我们可以在setting.py里面添加一段代码,使得输出日志的等级为ERROR
LOG_LEVEL = "WARNING"
然后重新在cmd里输入抓取命令
我们就可以成功抓取该页面的内容了
如果我们要获取博客上发布的所有内容,那我们就还需要对sp.py进行修改,在parse函数里面添加获取下一页的代码,可以先在浏览器上打开该网页,查看下一页网页的格式,可以发现下一页已经是完整格式的链接了
那么我们直接在抛出的scrapy.Request参数里面使用我们获取的网页即可
pre_url = response.xpath("//div[@class = 'nav-previous']//a/@href").extract_first()
if pre_url:
yield scrapy.Request(pre_url, callback=self.parse)//调用自身
但在某些网站获得的网址并不是一个完整的网址(笔者的网站的反爬机制相当的弱)
就需要在提取的网址前,在加入该网页的头部地址,这里相信各位自己可以操作,暂不赘述。修改完后我们还需要在setting.py里修改USER_AGENT的值,在修改之前还需要获取网页的USER_AGENT的值。
注:USER_AGENT是爬虫与网站反爬虫机制交锋的地方,双方会针对这一部分做出千变万化的措施来相互对抗。笔者此步骤只适用于最简单的反爬虫机制。实际上笔者的网站目前并没有任何的反爬虫机制,即使是不进行这一步,我们也可以正常地爬取完所有的文章内容。
打开Network界面后,在右下方点击顶部菜单"Headers",滑到底部就可以获取user-agent的值了
然后我们在setting找到被注释的USER_AGENT代码,将它的值修改为此处复制的值
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
处理完毕后我们可以重新在cmd界面抓取数据
scrapy crawl sp
成功抓取网站所有文章的内容
4.保存文件
如果想保存文件,那只需要在命令行里输入如下代码:
scrapy crawl sp -o mxp7.csv
在当前目录会新建一个mxp7.csv文件
打开发现是乱码,我们可以通过记事本打开,另存为此格式
重新打开后就可以获得正常的文件了
相关推荐
- 丨公司丨公司大架构整理汇总
-
注:本文转自团队成员原创作品,特此鸣谢(公号:法海图鉴)今日话题公司大架构整理背景介绍经过前几期话题对各种企业类型的介绍,想必大家已经有了初步认识。之后我将带着大家开启对公司的深入了解。本期...
- 图解物理--八年级物理下册最全知识框架导图
-
第七章力1力2弹力3重力第八章运动和力1牛顿第一定律2二力平衡3摩擦力第九章压强1压强2液体压强3大气压强4流体压强与流速的关系第十章浮力1浮力2阿基米德原理3物体的浮沉条件及应用第十一章功...
- 八年级上册生物,思维导图,期末高分必备资料,家长收藏
-
这是八年级上册生物的思维导图,孩子在背诵知识点的时候,可以看一下知识点在导图中的位置,形成对知识点整体的把握,有助于学生拿高分,特别是图片中带红色星星的部分,更是要注意背诵,是重点内容。家长可以把图片...
- 2019政府工作报告精华,这张思维导图里全都有
-
每经记者:李可愚每经编辑:陈星每日经济新闻
- 图解薪酬体系结构设计
-
...
- 司考复习独家总结!一张图总结行政法知识结构体系
-
作为三大实体法之一,行政法的分值在60分左右,行政法在司法考试中一直比较平稳常规,没有偏题怪题,还是比较容易得分的。小编要提醒大家,在3月之前要把三大实体法学习一遍。下图是厚大在线360导学师小周总结...
- 实用干货!高中物理框架图,让零碎知识“串联”起来
-
高中物理学习一定要抓好逻辑结构大框架!了解整个知识框架体系后,更易抓住骨干知识,干掉重难知识点~今天给大家分享高中物理的框架图同学们赶紧收藏起来吧!力学知识结构图光学知识结构图热学、原子物理知识结构图...
- 254m超高层办公楼型钢砼框架-核心筒结构图
-
高度类别:超高层建筑钢筋混凝土结构:框架,框架核心筒钢结构:钢框架建筑功能:办公包含:办公楼57层(-3层)254.150m钻孔灌注桩桩+筏板型钢混凝土框架-钢筋混凝土核心筒西裙房2层(-...
- 砖混结构与框架结构,究竟有何区别?千万别被坑!
-
现在买房装修的人最怕啥?不是价格高,而是房子不安全!两种主流建筑结构,砖混靠墙,框架靠柱子,选错了隔墙都可能要命。简单说,砖混便宜但别碰高层,框架贵点但能保命。砖混那些承重墙根本不能拆,想砸墙改个开放...
- 大师一百——高中化学必考:《元素周期律》考点框架图
-
今天大师给大家带来的是高中化学的《元素周期律》考点框架图,高中的同学必须牢记于心,这种重要的考点,考试是一定会考的!化学大师...
- 需求分析框架图
-
需求分析框架图
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)