常用爬虫技术

743次阅读
没有评论
常用爬虫技术

常用爬虫技术

一、常用爬虫技术

爬虫系统的核心部件之一就是HTML网页下载器,下载网页需要实现HTML请求,在python中实现HTML请求比较常用的库主要有两个:urllib库和requests库
urllib库:urllib库是python内置的HTML请求库
requests库:基于urllib库,基于Apache2开源协议的HTML库,比urllib更加方便

解析网页主要三种工具
正则表达式:使用预定义的模式去匹配一类具有相同特征的字符串,可以快速、准确的完成复杂的查找,替换等处理要求。
lxml库:lxml库使用Xpath语法,同样是效率较高的解析库。是一门在XML文档中查找信息的语言,可以在XML文档中对元素和属性进行遍历
bs4.BeautifulSoup:BeautifulSoup可以从HTML和XML文件中提取数据的python库,能够实现文档的导航和查找,简单易学,相比上面速度较慢

爬虫框架
常见的有Scrapy(最著名,最受欢迎)、Pyspider、Cola

二、爬虫基础

HTTP请求

超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)编写的文档从WEB服务器端传送到客户端的浏览器。HTTP请求可以理解为浏览器到web服务器的请求消息

HTTP请求信息有请求方法,请求头部,请求正文组成

请求方法

常见的请求方法有get()和post()
get方法。get方法请求指定的页面信息。如要查询字符串,这些信息包含在get请求的url中
post方法。post方法向指定的资源提交要被处理的数据(如提交表单或者用户登录验证),数据包含在请求体中。post请求可能会导致新的资源建立或者已有资源的修改
get方式提交的数据最多只有1024kb,而post则没有限制。使用get时,参数显示在地址栏,而post不会

请求头部

请求头部包含很多客户端环境和请求正文信息。如,请求头部可以声明浏览器所用语言,浏览器类型,操作系统,请求正文长度等
一般网站服务器最常用发爬虫措施是通过读取请求头部的用户代理(User-Agent)信息,来判断这个请求使来自于正常的浏览器还是爬虫
为应对服务器这种反爬虫测略,编写爬虫系统经常需要构造请求头部,来伪装一个正常的浏览器

打开chrome浏览器 –> 右击选择检查出现子页面 –> 单击子页面菜单中network –> 输入网址,打开该网址主页,可以看到子页面出现大量请求的url记录 –> 找到最上面的请求记录,单击,右侧会出现请求的详细信息。主要关注Request Headers(请求头部)

Request Headers由众多头域组成,每个头域有一个域名、冒号、值域组成。他以字典的形式列出信息。其中包含最重要的User-Agent(用户代理信息)

HTTP响应

浏览器发送HTTP请求后,web服务器会返回一个响应,其中储存了服务器响应的内容,该响应以HTML格式发送给浏览器的,。同时服务器会发送一个响应状态码(HTTP STATUS CODE),HTTP状态码主要是为了标识此次请求的运行状态。状态码有三位十进制数字组成,第一个数字定义响应的类别
1xx:提示信息,表示服务器已收到请求,需请求者继续操作
2xx:成功,表示请求已成功接收,理解并处理
3xx:重定向,要完成请求必须更进一步的操作
4xx:客户端错误,请求有语法错误或请求无法实现
5xx:服务端错误,服务器在处理请求过程中发生错误
常用的HTTP状态码及含义
100:客户端应当继续发送请求
200:请求成功
301:资源被永久转移到其他url
302:请求的资源现在临时从不同的url响应
400:语义或者请求参数有误
404:请求的资源不存在
500:服务器内部错误
501:服务器无法识别请求

requests库,非python标准库,需安装
requests上发送请求使用get方法或post方法,如果只请求头部,可以使用head方法
使用requests请求方法后,系统会返回一个响应对象,它存储了服务器响应的内容,可使用response对象的的text属性获取文本属性的响应内容。requests会自动解码来自服务器的内容。可使用response.encoding查看编码方式,也可修改response.encoding属性让response.text使用其他编码方式进行解码
服务器通过读取请求头部的用户代理信息,来判断这个请求是正常的浏览器还是爬虫系统发出的。因此,需要为请求添加HTTP头部来伪装成正常的浏览器。解决方法是构造一个用户代理的字典给请求头部就可以了
默认情况下,除了head请求方法,requests会自动处理所有的重定向。可以使用响应对象的history属性追踪重定向。history属性返回一个列表,他是一个response对象的列表。可以使用url属性查看实际请求的url
在爬取网页的过程中,有时服务器可能没有响应。为应对这种情况,设置timeout参数来定义超时时间(单位为秒)。超时停止等待
url传递查询参数时(浏览器搜索看地址栏里?后面的就是参数),查询的数据以键=值形式跟在?后面,多个查询数据以&相连
requests的get方法允许使用params关键字参数,post方法使用data关键字参数
这些参数有一个字符串字典提供
使用response对象的status_code字段获取响应码
如果响应中包含cookie,使用如下方式获取cookie字段的值
for cookie in response.cookie.keys()
print(cookie,":",response.cookie.get(cookie))

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计2306字。
新手QQ群:570568346,欢迎进群讨论 Python51学习