使用Requests库进行网页爬取
requests:
import requests
# 返回一个Response对象
r = requests.get("http://www.baidu.com")
# 状态码 200 表示成功
code = r.status_code
print(code)
# encoding表示网页编码,从HTTP header中的charset中猜测出来,没有charset的话就会默认为ISO-8859-1,但是这种编码不能解析中文
print(r.encoding)
# apparent_encoding是一个备选编码,它是从网页的内容推测出来,一般来说encoding比较准确,因为它指定了编码,但是如果没有设置的话,它就会默认为ISO-8859-1,但是这种编码不能解析中文
# 所以当出现乱码时可以使用apparent_encoding里的备选编码来指定网页的编码
print(r.apparent_encoding)
# text就是抓取到的网页内容
print(r.text)
# 上面打印text时,出现乱码,apparent_encoding有utf-8编码,我们指定后,再抓取就解决问题了
r.encoding = "utf-8"
print(r.text)
# content是网页的二进制形式,要获取网页里的图片就可以通过这种方式
print(r.content)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
使用requests抓取网页通用框架:
import requests
# 抓取网页
def get_html_text(url): try: r = requests.get(url, timeout=30) # 如果状态不是200,引发HTTPError异常 r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "产生异常"
if __name__ == "__main__": url = "http://www.baidu.com" print(get_html_text(url))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
requests.request(method, url, **kwargs)讲解
**kwargs:访问控制参数,均为可选项,有13个
1、params:字典或字节序列,作为参数增加到URL中,如:
kv = {"key1": "value1", "key2": "value2"}
r = requests.request("GET", "http://www.baidu.com", params=kv)
print(r.url)
# http://www.baidu.com/?key1=value1&key2=value2
- 1
- 2
- 3
- 4
2、data:字典、字节序列或文件对象,,当然也可以在data域赋一个字符串,作为Request的内容,并不放在url链接里,而是作为数据部分存储,如:
kv = {"key1": "value1", "key2": "value2"}
r = requests.request("GET", "http://www.baidu.com", data=kv)
print(r.url)
# http://www.baidu.com/
- 1
- 2
- 3
- 4
3、json:作为Request的内容提交。
kv = {"key1": "value1", "key2": "value2"}
r = requests.request("GET", "http://www.baidu.com", json=kv)
print(r.url)
# http://www.baidu.com/
- 1
- 2
- 3
- 4
4、headers:HTTP头的相关域,可以用它来定义http协议头,来访问服务器
# 服务器就会看到user-agent是Chrome/10,这样就可以模拟浏览器来访问服务器
hd = {'user-agent': 'Chrome/10'}
r = requests.request("GET", "http://www.baidu.com", headers=hd)
- 1
- 2
- 3
5、cookies:字典或CookieJar,Request中的cookie
6、auth:元组,支持HTTP认证功能
7、files:字典类型,传输文件
fs = {'file': open('data.txt', 'rb')}
r = requests.request("GET", "http://www.baidu.com", files=fs)
- 1
- 2
8、timeout:设定超时时间,秒为单位
r = requests.request("GET", "http://www.baidu.com", timeout=30)
- 1
9、proxies:字典类型,设定访问代理服务器,可以增加登录认证。可以为我们设定特定的代理服务器,在代理中可以设置用户名和密码,使用代理服务器可以有效地隐藏爬取网页的源IP地址,可以有效地防止爬虫的逆追踪。
pxs = {'http': 'http://username:password@192.168.1.3:7777', 'https': 'https://192.168.2.4:8888'}
r = requests.request("GET", "http://www.baidu.com", proxies=pxs)
- 1
- 2
10、allow_redirects:True/False,默认True,表示允不允许重定向。
11、stream:True/False,默认True,表示获取的内容要不要立即下载。
12、verify:True/False,默认True,认证SSL证书的字段
13、cert:保存本地SSL证书的路径
Requsts其他六个方法的访问控制参数也是大同小异的。
文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_40763897/article/details/96019713
- 点赞
- 收藏
- 关注作者
评论(0)