欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

requests功能

程序员文章站 2022-03-02 22:25:31
...

requests功能

使用GET和POST发送请求

(1)使用requests发送get请求将百度搜索的页面源码爬回来,返回的是百度搜索页面的HTML源码。

>>> import requests  
>>> r = requests.get("https://www.baidu.com") #像百度发送请求并返回一个对象
>>> r = r.text #获取文本对象
>>> print(r) #打印结果

(2)用post的方法向httpbin.org这个网站发送请求并获得数据,返回的是json数据。什么是 json数据

>>> r = requests.post("http://httpbin.org/post",data={'key':'value'})
>>> r = r.text
>>> print(r)

通过URL传递参数

 URL不仅是一个网址,在访问URL的时候经常带上一些查询的字符串,这就是请求参数。request允许通过字典或者字符串来传参。
>>> import requests
>>> payload = {'key1' : 'value1' , 'key2' : 'value2'}
>>> r = requests.get('http://httpbin.org/get',params = payload)
>>> print(r.url)
# http://httpbin.org/get?key1=value1&key2=value2
>>> payload = {'key1' : 'value1' , 'key2' : ['value2','value3']}
>>> r = requests.get('http://httpbin.org/get',params = payload)
>>> print(r.url)
# http://httpbin.org/get?key1=value1&key2=value2&key2=value3

设置超时

 在请求的时候设置超时等待时间,可以避免等待太久。在请求的时候给参数timeout一个数值,单位是秒。如果请求超过这个值,就会断开并报错。
r = requests.get('http://baidu.com',timeout=0.001)
# requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='baidu.com', port=80): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7fda950fcfd0>, 'Connection to baidu.com timed out. (connect timeout=0.001)'))

查看返回内容

打印response内容

>>> import requests  
>>> r = requests.get("https://www.baidu.com") #像百度发送请求并返回一个对象
>>> r = r.text #获取文本对象
>>> print(r) #打印结果

当发起一个请求的时候,requests会根据HTTP的headers进行编码

>>> r.encoding
# 'ISO-8859-1'
>>> r.encoding = 'utf-8'
>>> r.encoding
# 'utf-8'

设置请求头

  爬虫必须让自己看起来不像爬虫,因此爬虫需要伪装,设置请求头,可以让爬虫爬取的过程看起来是一个用户在使用浏览器浏览。
  HTTP消息头,以明文的字符串格式传送,是以冒号分隔的键/值对。
  HTTP消息头是客户端请求或服务器相应的时候传递的头部信息,内容包含了浏览器信息、请求数据类型等。发送请求的时候消息头称为请求头,服务器返回内容时的消息成为响应头。
>>> headers = {'user-agent':'Opera/9.80(Macintosh;Intel Mac OS X 10.6.8;U;fr)presto/2.0.168 version/11.52'}
>>> r = requests.get('http://baidu.com',headers = headers)
>>> r = r.text

更多复杂的POST请求

>>> payload = {'key1' : 'value1' , 'key2' : ['value2','value3']}
>>> r = requests.post('http://httpbin.org/post',params = payload)
>>> print(r.text)
# 返回的结果
”“”
{
  "args": {
    "key1": "value1", 
    "key2": [
      "value2", 
      "value3"
    ]
  }, 
  "data": "", 
  "files": {}, 
  "form": {}, 
  # 请求头
  "headers": {
    "Accept": "*/*", 
    # 解码方式
    "Accept-Encoding": "gzip, deflate", 
    #内容长度
    "Content-Length": "0", 
    # 主机域名
    "Host": "httpbin.org", 
    #请求UA
    "User-Agent": "python-requests/2.25.1", 
    "X-Amzn-Trace-Id": "Root=1-600c086f-60e8e1057f12c59549a6c263"
  }, 
  "json": null, 
  # 请求者 IP
  "origin": "120.228.161.240", 
  #请求URL
  "url": "http://httpbin.org/post?key1=value1&key2=value2&key2=value3"
}

“”“

返回对象状态码

>>> r = requests.get('http://httpbin.org/get')
>>> r.status_code
200

设置代理IP

如果爬虫是进行长时间的大量爬取,一定要给爬虫配上代理IP。

>>> import requests
>>> proxies = {'http':'http://10.10.1.10:3128','https':'http://10.10.1.10:1080'}
>>> requests.get('http://example.org',proxies=proxies)

如果代理需要用户密码认证

proxies = {'http':'http://user:[email protected]:3128/'}
相关标签: 爬虫 python