第一周 1 (requests库)

 

 

2. requests.get()方法

r = requests.get(url)
Requests库的2个重要对象
作用:构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Response对象

import requests
r = requests.get("http://www.baidu.com")
print(r.status_code)
type(r)
r.headers
  

Response对象的属性

r.content 获得一个图片,图片以二进制存储,r.content还原图片

 

  

Requests库 head()方法
>>> r = requests.head('http://httpbin.org/get')
>>> r.headers
{'Content‐Length': '238', 'Access‐Control‐Allow‐Origin': '*', 'Access‐
Control‐Allow‐Credentials': 'true', 'Content‐Type':
'application/json', 'Server': 'nginx', 'Connection': 'keep‐alive',
'Date': 'Sat, 18 Feb 2017 12:07:44 GMT'}
>>> r.text
''



3 requests库的主要方法解析

(1)requests.request(method, url, **kwargs)
method : 请求方式,对应get/put/post7
url : 拟获取页面的url链接
**kwargs: 控制访问的参数,共13个 

method : 请求方式r = requests.request('GET', url, **kwargs)

r = requests.request('HEAD', url, **kwargs)
r = requests.request('POST', url, **kwargs)
r = requests.request('PUT', url, **kwargs)
r = requests.request('PATCH', url, **kwargs)
r = requests.request('delete', url, **kwargs)
r = requests.request('OPTIONS', url, **kwargs)

**kwargs: 控制访问的参数,均为可选项
params : 字典或字节序列,作为参数增加到url
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', params=kv)
>>> print(r.url)
http://python123.io/ws?key1=value1&key2=value2

data : 字典、字节序列或文件对象,作为Request的内容
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('POST', 'http://python123.io/ws', data=kv)
>>> body = '主体内容'
>>> r = requests.request('POST', 'http://python123.io/ws', data=body)

json : JSON格式的数据,作为Request的内容
>>> kv = {'key1': 'value1'}
>>> r = requests.request('POST', 'http://python123.io/ws', json=kv)

headers : 字典,HTTP定制头
>>> hd = {'user‐agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', headers=hd)

cookies : 字典或CookieJarRequest中的cookie
auth : 元组,支持HTTP认证功能

files : 字典类型,传输文件
>>> fs = {'file': open('data.xls', 'rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files=fs)

timeout : 设定超时时间,秒为单位
>>> r = requests.request('GET', 'http://www.baidu.com', timeout=10)

proxies : 字典类型,设定访问代理服务器,可以增加登录认证
>>> pxs = { 'http': 'http://user:pass@10.10.10.1:1234'
'https': 'https://10.10.10.1:4321' }
>>> r = requests.request('GET', 'http://www.baidu.com', proxies=pxs)

allow_redirects : True/False,默认为True,重定向开关
stream : True/False,默认为True,获取内容立即下载开关
verify : True/False,默认为True,认证SSL证书开关
cert : 本地SSL证书路径

requests.request(method, url, **kwargs)
**kwargs: 控制访问的参数,均为可选项
params
data
json
headers
cookies
auth
files
timeout
proxies
allow_redirects
stream
verify
cert

(2) requests.get(url, params=None, **kwargs)
url : 拟获取页面的url链接
params : url中的额外参数,字典或字节流格式,可选
**kwargs: 12个控制访问的参数

(3)requests.head(url, **kwargs)
url : 拟获取页面的url链接
**kwargs: 12个控制访问的参数

(4)requests.post(url, data=None, json=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
json : JSON格式的数据,Request的内容
**kwargs: 12个控制访问的参数

(5)requests.put(url, data=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数

(6)requests.patch(url, data=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数

(7)requests.delete(url, **kwargs)
url : 拟删除页面的url链接
**kwargs: 12个控制访问的参数

 网络爬虫的限制

 来源审查:判断User‐Agent进行限制
检查来访HTTP协议头的User‐Agent域,只响应浏览器或友好爬虫的访问
发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守

robots协议

Robots Exclusion Standard,网络爬虫排除标准

作用:
网站告知网络爬虫哪些页面可以抓取,哪些不行
形式:
在网站根目录下的robots.txt文件

案例:京东的robots协议

https://www.jd.com/robots.txt
User‐agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User‐agent: EtaoSpider
Disallow: /
User‐agent: HuihuiSpider
Disallow: /
User‐agent: GwdangSpider
Disallow: /
User‐agent: WochachaSpider
Disallow: /

# 注释,*代表所有,/代表根目录
User‐agent: *
Disallow: /
Robots协议基本语法

案例:真实的robots协议

http://www.baidu.com/robots.txt
http://news.sina.com.cn/robots.txt
http://www.qq.com/robots.txt
http://news.qq.com/robots.txt
http://www.moe.edu.cn/robots.txt (无robots协议 )

 

import time
import requests

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "Error"
    
if __name__ == "__main__":
    url = 'https://www.cnblogs.com/key221/p/9511225.html'
    start_time = time.perf_counter()
    for i in range(50):
        getHTMLText(url)
        print('第{}次爬取,耗时{:.5}s'.format(i, time.perf_counter()-start_time))
    end_time = time.perf_counter()
    print('50次爬取网页最终耗时{:.5}s'.format(end_time-start_time))
    

  

 

原文地址:https://www.cnblogs.com/key221/p/9511225.html