其实,一开始学python的时候,我是冲着数据处理分析去了,那个pandas什么的。后来,发现爬虫挺好玩,可以解决纯手工采集网上数据的繁琐问题,比如我用的比较多的爬取taptap某游戏评价内容、某视频网站某剧的弹幕、某评的店铺信息、某牙主播信息等等。
关于爬虫,我也只会一些比较基础的操作,不过个人经验上感觉这些基础基本可以满足比较常规化的需求。对于进阶的爬虫技巧,大家在了解熟悉爬虫基础后自然会有进阶学习的思路与途径。
接下来,我们进入主题吧~
把爬虫的过程模块化,基本上可以归纳为以下几个步骤:
当我们有一个目标网站,有时候会发现对于,我们只需要把网页地址栏中的URL传到get请求中就可以直接取到网页的数据。但如果这是,我们便无法通过简单的传递网页地址栏的URL给get请求来获取网页数据,往往这个时候,我们进行翻页的时候还会发现网页地址栏中的URL是不会发生变化的。
接下来,我们来分别介绍这两种情况下如何获取真实的页面数据URL地址。
1.1 静态网页
对于静态网页来说,其实网页地址栏中的URL就是我们需要的。
以 (https://bj.ke.com/ershoufang/) 为例,我们可以看到进行翻页(如到第2页)的时候网页地址栏的URL变为了(https://bj.ke.com/ershoufang/pg2/)。类型这种情况,多半就是静态网页了,而且翻页的URL规律十分明显。
1.2 动态网页
对于动态网页来说,我们一般可以通过以下几个步骤找到真实URL地址:
以 (https://www.huya.com/g/xingxiu) 为例,我们可以看到进行翻页(如到第2页)的时候网页地址栏的URL没有发生任何改变。
为了便于找到真实的URL地址,我们可以在开发者模式中找以下截图中的几点,是预览结果,可以便于我们进行匹配定位具体的。
虎牙星秀区
当我们定位到具体的Name后,右侧选择可以查看到请求网页需要的相关参数信息,而且比较好拟清其变化规律。以虎牙星秀为例,其真实URL地址及变化规律如下:
URL= 'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=1663&tagAll=0&page=2'
基础 url 地址如下:
请求参数parames如下:
真实URL地址
当我们确定了真实数据的URL后,这里便可以用的get或post方法进行请求网页数据。
关于requests库的更多使用方式,大家可以前往(https://requests.readthedocs.io/zh_CN/latest/)查看。
2.1 发送get请求
我们得到的是一个Response对象,如果我们想要获取网页数据,可以使用或属性来获取,另外如果获取的网页数据是json格式的则可以使用Requests 中内置的 json()解码器方法,助你处理json 数据。
对于一些动态网页,请求的网址是基础url和关键字参数组合而成,这个时候我们可以使用 关键字参数,以一个字符串字典来提供这些参数。
2.2 发送post请求
通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:
很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个 而不是一个 ,那么数据会被直接发布出去。
此处除了可以自行对 进行编码,你还可以使用 参数直接传递,然后它就会被自动编码。
2.3 定制请求头
在模拟请求时,如果不设置请求头的话是比较容易被网站发现是来自爬虫脚本,一些网站会对这种模拟请求进行拒绝。因此我们可以简单设置一下请求头做伪装,一般是设置浏览器。
其实,对于请求头还可以设置很多参数,具体大家可以在实际爬虫过程中在开发者模式看看里面的请求头模块进行分析处理。
虎牙星秀请求头
2.4 响应码
我们在 2.1 中看到获取响应码的是通过 属性,一般来说如果 返回 数字 200,则表示成功获取了网页数据。
响应码分为五种类型,由它们的第一位数字表示:1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接受、理解和采纳 3xx:重定向,为了完成请求,必须进一步执行的动作 4xx:客户端错误,请求包含语法错误或者请求无法实现 5xx:服务器错误,服务器不能实现一种明显无效的请求
上面有提到我们请求的网页数据有Html源码文本或者是json字符串文本,两者的解析方式不同。以下我们分别进行简单说明,大家在实际操作中视情况而定即可。
3.1 网页html文本解析
对于网页html文本来说,这里介绍、和三种解析方法。
以贝壳二手房最新房源(https://bj.ke.com/ershoufang/co32/)为例,其html源码如下,我们通过get请求后的数据进行解析。
贝壳二手房
3.1.1 Beautiful Soup
关于Beautiful Soup库的更多使用方式,大家可以前往查看(https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/)
首先安装。
我们将网页html文本内容当作第一个参数传给对象,该对象的第二个参数为解析器的类型(这里使用),此时就完成了对象的初始化。然后,将这个对象赋值给变量。
房源名称
获取房源的名称的代码如下:
房源其他信息大家可以自己处理,强化学习!
3.1.2 xpath
XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。
首先安装lxml。
常见的规则如下:
首先导入 lxml 库的 etree 模块,然后声明一段 HTML 文本,调用 HTML 类进行初始化,成功构造一个 XPath 解析对象。
右键可获取xpath
通过copy获取的xpath:
其他房源信息,大家可以自行处理,强化学习!
3.1.3 re正则
关于re正则解析网页html大家也可以前往查看此前发布的文章《》。
3.2 json文本解析
在requests提供了r.json(),可以用于json数据解码,一般网页数据为json格式时用此方法。除此之外,还可以通过json.loads()和eval()方法进行处理,具体可以参考此前文章《》。
json文本解析
如此解析后得到的数据就是字典,然后我们在看看字典中哪些字段是我们需要的,取出即可。
当我们获取了到想要的数据后,便可以写入本地了。
对于文本类数据,可以通过csv模块或pandas模块进行写入到本地csv文件或excel文件;同时也可以用pymysql模块写入到数据库或者sqlite写入到本地数据库。
对于视频或者图片,可以open一个文件然后写入二进制内容后保存本地亦可。
关于存储数据大家可以结合实际案例进行学习。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/15893.html