网页数据抓取怎么写(怎么一步写爬虫,直至抓到数据的过程(图))
优采云 发布时间: 2021-11-08 00:12网页数据抓取怎么写(怎么一步写爬虫,直至抓到数据的过程(图))
最近经常有人在看教程的时候问我写爬虫容易吗,但是上手的时候,爪子都麻了。. . 所以今天跟刚开始学习爬虫的同学们分享一下如何一步步写爬虫,直到拿到数据。
准备工具
首先是准备工具:python3.6、pycharm、请求库、lxml库和火狐浏览器
这两个库是python的第三方库,需要用pip安装!
requests用于请求一个网页,获取网页的源码,然后使用lxml库分析html源码,从中取出我们需要的内容!
你使用火狐浏览器而不使用其他浏览器的原因没有其他意义,只是习惯而已。. .
分析网页
工具准备好后,就可以开始我们的爬虫之旅了!今天我们的目标是捕捉猫眼电影的经典部分。大约有80,000条数据。
打开网页后,首先要分析网页的源代码,看它是静态的还是动态的,还是其他形式的。这个网页是一个静态网页,所以源码中收录了我们需要的内容。
很明显,它的电影名称和评级在源代码中,但评级分为两部分。这点在写爬虫的时候要注意!
所以,现在整体思路已经很清晰了:请求网页==>>获取html源码==>>匹配内容,然后在外面添加一个步骤:获取页码==>>构建一个所有页面的循环,这样你可以所有的内容已被捕获!我们把代码写在外面。
开始编写爬虫
先导入两个库,然后用一行代码得到网页html,打印出来看看效果
好吧,网站 不允许爬虫运行!加个headers试试(headers是*敏*感*词*明,说明请求的网页是浏览器而不是python代码),获取方式也很简单,打开F12开发者工具,找到一个网络请求,然后找到请求如下图Header,复制相关信息,这个header就可以保存了,基本上一个浏览器就是一个UA,下次直接用就可以了。
欢迎加入学习群:六九九+七四九+八五二,群里都是学Python开发的,如果你是学Python的,小编欢迎你加入,大家都是软件开发党,分享干货来自不定时(仅与Python软件开发相关),内附本人2018年编译的最新Python进阶资料和进阶开发教程,欢迎进阶及想深入Python的朋友。
注意在Firefox中,如果header数据很长,会被缩写。看到上图中间的省略号了吗……?所以复制的时候一定要先双击展开,复制,然后再修改上面的代码。看
这一次,html被正确打印了!(后面的.text是获取html文本,不加会返回获取是否成功的提示,不是html源码),我们先建个循环页码,找到用于翻页的html代码
点击开发者工具左上角的选择元素,然后点击页码,下面会自动定位到对应的源码位置,这里我们可以直观的看到最大页码,先取出来,右键就可以了,选择Copy Xpath,然后写在代码里
第9行表示使用lxml中的etree方法解析html,第10行表示从html中查找路径对应的标签。因为页码是文字显示,是标签的文字部分,所以在路径末尾加一个/text 取出文字,最后以列表的形式取出内容。然后我们要观察每个页面的url,还记得刚才页码部分的html吗?
href的值是每个页码对应的url,当然省略了域名部分。可以看到,它的规律是offset的值随着页码的变化而变化(*30) 那么,我们就可以建立一个循环!
第10行,使用[0]取出列表中的pn值,然后构建循环,然后获取新url的html(pn_url),然后去html匹配我们想要的内容!为方便起见,添加一个中断,使其仅循环一次
然后开始匹配,这次我们只拿出了电影名称、评分和详情url 3个结果
可以看到,我们要的内容在dd标签下,下面有3个div,第一个是图片,不用管,第二个是电影名,详情页url也在里面,第三个div里面有评分结果,所以我们可以这样写
第14行还是解析html,第15行和第16行分别获取class属性为“channel-detail movie-item-title”的div标签下的title值和a标签下的href值div(这里复制没有用)xpath的路径,当然可以的话,我建议你用这个方法,因为如果你用了路径,万一网页的结构被修改了,那么我们的代码就会改写……)
第17、18、2行代码获取div标签下的所有文字内容,还记得分数吗?不是在一个标签下,而是两个标签下的文字内容合并了,这样就搞定了!
然后,使用zip函数将内容一一写入txt文件
注意内容间距和换行符!
至此,爬虫部分基本完成!我们先来看看效果。时间有限,所以我们将抓取前5页。代码和结果如下:
后记
整个爬取过程没有任何难度。一开始,您需要注意标题。后面在爬取数据的过程中,一定要学习更多的匹配方法。最后,注意数据量。有两个方面:爬取间隔和爬取数量,不要对网站造成不良影响,这是基本要求!后面还有这个网站,到100页左右的时候需要登录,这点请注意,可以自己试试!返回搜狐查看更多