本文共 3026 字,大约阅读时间需要 10 分钟。
内容主要参考北京理工大学嵩天老师的《Python网络爬虫与信息提取》课程,不想看视频,自学能力强的就直接看PPT了
课程实例如下: python开发工具选择为:pycharm+AnacondaRequest库——自动爬取HTML页面、自动网络请求提交
安装略过,测试代码如下:
// 爬虫代码示例1import requestsr = requests.get("http://www.baidu.com")print(r.status_code)print(r.text)
结果如下:
现在还暂时看不懂这些代码及结果,先不管。Requests库的7个主要方法如下所示:
// 爬虫代码示例2import requestsr = requests.get("http://www.baidu.com")print(r.status_code)# print(r.text)print(type(r))print(r.headers)
结果如下所示:
200{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sat, 16 Jan 2021 11:34:03 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:27:29 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'}
所以Response对象包含服务器返回的所有信息,也包含请求的Request信息。
首先需要理解Requests库的异常,因为网络连接是有风险的:
r.raise_for_status()在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try‐except进行异常处理 爬取网页的通用代码框架如下:import requestsdef getHTMLText(url): try: r = requests.get(url, timeout=30) r.raise_for_status() # 如果状态不是200,引发HTTPError异常 r.encoding = r.apparent_encoding return r.text except: return "产生异常"if __name__ == "__main__": url = "http://www.baidu.com" print(getHTMLText(url))
注意! url = "www.baidu.com"会报错
HTTP协议:Hypertext Transfer Protocol,超文本传输协议,是一个基于“请求与响应”模式的、无状态的应用层协议,协议采用URL作为定位网络资源的标识,URL格式如下:
其中:参数名 | Value |
---|---|
host | 合法的Internet主机域名或IP地址 |
port | 端口号,缺省端口为80 |
path | 请求资源的路径 |
URL实例例如:
简单来说,URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
下面介绍HTTP协议对资源的操作: 通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子 HTTP协议与Requests库功能是一致的,可以认为六种方法是等价的。requests.request(method,url,**kwargs)
method : 请求方式,对应get/put/post等7种
url: 拟获取页面的url链接
**kwargs: 控制访问的参数,共13个,控制访问的参数,均为可选项不用记住。总而言之,**kwargs: 控制访问的参数,均为可选项 。
之前的get函数:
内容参考来源: .
转载地址:http://ugvrn.baihongyu.com/