小言_互联网的博客

python爬虫学习笔记(一)——初识爬虫

462人阅读  评论(0)

一.什么是爬虫?


  • 网络爬虫,是一种按照一定规则,自动抓取互联网信息的自动化程序或者脚本。



二. 爬虫的本质是什么?


  • 模拟浏览器打开网页,获取网页中我们需要的那部分数据



三.了解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对应一个数据资源



四.爬虫基本流程


  1. 发起请求:通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。


  1. 获取响应内容:如果服务器能正常响应,会得到一个Response,
    Response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型。


  2. 解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。


  3. 保存数据:保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。






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‐88591
                         ||  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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场