一.什么是爬虫?
- 网络爬虫,是一种按照一定规则,自动抓取互联网信息的自动化程序或者脚本。
二. 爬虫的本质是什么?
- 模拟浏览器打开网页,获取网页中我们需要的那部分数据
三.了解HTTP协议
HTTP,Hypertext Transfer Protocol,超文本传输协议
HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
HTTP协议采用URL作为定位网络资源的标识,URL格式如下:
http://host[:port][path]
host: 合法的Internet主机域名或IP地址
port: 端口号,缺省端口为80
path: 请求资源的路径
HTTP URL实例(也就是一个网址):http://www.baidu.com
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
四.爬虫基本流程
- 发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
-
获取响应内容:如果服务器能正常响应,会得到一个Response,
Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。 -
解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
-
保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
Request请求,Response响应
Requests库的安装:“以管理员身份运行” cmd,然后执行
pip install requests
Requests库的7个主要方法:
1.requests.request() || 构造一个请求,支撑以下各方法的基础方法
2.requests.get() || 获取HTML网页的主要方法,对应于HTTP的GET
3.requests.head() || 获取HTML网页头信息的方法,对应于HTTP的HEAD
4.requests.post() || 向HTML网页提交POST请求的方法,对应于HTTP的POST
5.requests.put() || 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
6.requests.patch() || 向HTML网页提交局部修改请求,对应于HTTP的PATCH
7.requests.delete() || 向HTML页面提交删除请求,对应于HTTP的DELETE
Requests库的get()方法(也是最常用的方法):
requests.get(url, params=None, kwargs)
∙ url: 拟获取页面的url链接
∙ params : url中的额外参数,字典或字节流格式,可选
∙ **kwargs: 13个控制访问的参数
**kwargs的13个控制访问的参数,均为可选项:
1.params : 字典或字节序列,作为参数增加到url中
2.data : 字典、字节序列或文件对象,作为Request的内容
3.json : JSON格式的数据,作为Request的内容
4.headers : 字典,HTTP定制头
5.cookies : 字典或CookieJar,Request中的cookie
6.auth : 元组,支持HTTP认证功
7.files: 字典类型,传输文件
8.timeout : 设定超时时间,秒为单位
9.proxies : 字典类型,设定访问代理服务器,可以增加登录认证
10.allow_redirects : True/False,默认为True,重定向开关
11.stream : True/False,默认为True,获取内容立即下载开关
12.verify : True/False,默认为True,认证SSL证书开关
13.cert : 本地SSL证书路径
r = requests.get(url) || r为Responese响应,包含爬虫返回的内容
Response对象的属性:
1.r.status_code || HTTP请求的返回状态,200表示连接成功,404表示失败
2.r.text || HTTP响应内容的字符串形式,即,url对应的页面内容
3.r.encoding || 从HTTP header中猜测的响应内容编码方式,如果header中不存在charset(字符集),则认为编码为ISO‐8859‐1
|| r.text根据r.encoding显示网页内容
4.r.apparent_encoding || 从内容中分析出的响应内容编码方式(备选编码方式)
5.r.content || HTTP响应内容的二进制形式
Requests库的异常情况:
1.requests.ConnectionError || 网络连接错误异常,如DNS查询失败、拒绝连接等
2.requests.HTTPError HTTP || 错误异常
3.requests.URLRequired URL || 缺失异常
4.requests.TooManyRedirects || 超过最大重定向次数,产生重定向异常
5.requests.ConnectTimeout || 连接远程服务器超时异常
6.requests.Timeout || 请求URL超时,产生超时异常
至此,我们可以写一段代码检测我们爬取一个网站信息是否出现异常
import requests
def GetHTML(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
print("爬虫成功!")
return r
except:
return "产生异常!"
def SaveHTML(response):
with open('G:/files/r.txt','wb') as f:
f.write(response.content)
f.close()
if __name__ == "__main__":
url = "https://www.csdn.net"
response = GetHTML(url)
SaveHTML(response)
此时,程序没有发生异常,并将爬取到的内容保存到了r.txt的文件中。
而且,在https://www.csdn.net中查看网页源代码,可以发现r.txt的内容与网页源代码的完全相同
于是,Hello 爬虫!
转载:https://blog.csdn.net/qq_24481195/article/details/105862618
查看评论