使用Requests库进行网页爬取

举报
yd_221104950 发表于 2020/12/04 23:44:28 2020/12/04
【摘要】 requests: import requests # 返回一个Response对象 r = requests.get("http://www.baidu.com") # 状态码 200 表示成功 code = r.status_code print(code) # encoding表示网页编码,从HTTP header中的charset中猜测出来,没有charse...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。