python爬⾍(requests+bs4)爬取⽹页数据并保存的实现思路和步骤
学习python有⼀段时间了,也写了第⼀个爬⾍,⼀直没有时间总结⼀下,学习的时候看了不少博客分享了⾃⼰的爬⾍思路和代码,感觉其中⼀些⽐较冗长且缺乏条理,因此今天希望通过⾃⼰的第⼀个爬⾍来总结下python写爬⾍的思路。
1.写爬⾍的思路和步骤
⾸先要有⼀个⼤致的思路,这样写代码就会⾮常顺畅,那么些爬⾍的思路是什么呢?我认为是根据⾃⼰要写的功能,⼀块⼀块的写。⽐如,我要写⼀个爬⾍实现爬取⽹页指定内容,并保存成⼀个⽂件,那么主要的步骤就应该是:
(1)爬取指定⽹页内容,这⾥利⽤python3的requests模块即可,Python的强⼤之处就是各种现成的模块太好⽤了,所谓前⼈栽树后⼈乘凉,直接调⽤各种功能会打打提⾼效率。requests模块的主要功能就是爬取内容,最常⽤的就是(),填⼊url为地址,这⾥明确两点,⾸先requests模块是⼀个复数,新⼿有时候会写成request单数,导致⽆法识别报错;其次,⽤的内容是HTTP的response体,是⽹页中的HTML源代码中的⼀部分,对这个response可以选择进⾏存储,不过⼀般我们不会在这⾥存储,因为截取的信息不是我们全部都想要。
(2)⽤request获得response的内容之后,因为它是HTML格式的⽂本,所以可能存在各种乱七⼋糟的字符,⽐如空格,以及各种标签,因此我们要对获得的信息进⾏⼀个提取,或者叫数据清洗,去掉其中不需要的数据,这⾥我们主要⽤到的是re模块,对指定的字符进⾏替换,⼀般使⽤re.sub()进⾏替换,括号内需要填⼊⼀些参数,⼤家可以⾃⾏百度。那么有个问题,我们需要先对数据进⾏⼀个解析或者识别,才能够进⾏替换处理,这时候就要⽤到bs4,我们⼀般⽤它来解析返回的response,将其解析为⽂本,然后再⽤re进⾏替换;⼀般⽤到的代码为:
涂惠源 黄绮珊
bs = BeautifulSoup(html, ‘html.parser’),⾥⾯的参数分别是返回体的格式以及⽤什么解析器解析,参数根据需要调整,不明⽩的可以⾃⾏百度.然后我们⼀般需要获取其中的部分内容,需要给需要获取的内容起个变量名,然后将解析后的内容当做值赋给它,如:
mid=bs.title.string
这⾥mid是我给变量起的名字,赋给它的值是返回包中title标签之间的内容,获取的内容为字符串
(3)获取完内容,也解析好了,就要进⾏数据清洗了,这⾥主要是利⽤re+正则来进⾏清洗,替换掉不想要的字符,那么就需要⽤正则对想删掉的数据进⾏定位,如:我想对上⾯解析后的⽂本,提取其中的⼀部分内容,代码为
username=re.sub(’_.*$’,"",mid)
这⾥username就是我最终经历数据下载、定位、清洗后需要输出的变量,re.sub()中的三个参数分别是,正则表达式,为了进⾏数据匹配和定位;要替换成的字符串(这⾥为空);要进⾏处理的变量。
(4)终于⾛到最后⼀步,数据处理好后,我们可以直接print,但⼀般数据量⼤的话,希望把它保存在⼀个⽂件中,那么就需要如下代码:fb=open(‘20.txt’,‘w+’,encoding=‘utf-8’)
#20.txt为我们想保存的⽂件名和格式,w+是给⽂本读写权限,encoding指定保存⽂本的编码
柳岩结婚fb.write(username)**
邓超最新消息#将我们获取和处理后的数据写⼊⽂本
总结⼀下,爬⾍⽤到了⼏个关键的东西:
银行保函1.requests,⽤它来给服务器发请求以获得response
2.bs4,⽤来对response的内容进⾏解析,使其变成⽂本,并提取指定的内容(这⾥是提取指定内容,但不是数据清洗,因为是提
浙江湖州旅游取,并没有删除东西)
朱苓<模块,re.sub进⾏数据清洗,把不想要的数据替换掉,如果想删除直接替换成空,这⾥需要⽤到正则表达式,⽽且可以使⽤
response中的HTML标签进⾏定位,只要该标签是唯⼀的就可以作为标志位,感兴趣的可以⾃⼰查查。
4.⾸先新建⼀个变量来打开⼀个空的⽂件,给其赋好⽂件名和格式,然后让该变量调⽤write来把获取的⽂本写⼊⽂件并保存。
2.我的代码
根据以上思路写了⼀个爬⾍,功能为爬取⽬标⽹站title内容中的某些部分(可以通过正则修改想要爬取的东西),贴出代码供参考,也可以对其中的⼀些参数进⾏修改后直接使⽤,可以实现⼀些简单的爬取数据功能,代码如下: