●Requests库入门
>>> kv ={'key1':'valuel','key2':'value2'}
>>> r=requests.request('GET','http://python123.io/ws',params=kv)
>>> print(r.url)
https://python123.io/ws?key1=valuel&key2=value2
2)data:字典、字节序列或文件对象,作为 Request的内容,向服务器提供、提交资源时使用;
>>> kv ={'key1':'valuel','key2':'value2'}
>>> r=requests.request('POST','http://python123.io/ws',data=kv)
>>> body = '主题内容'
>>> r=requests.request('POST','http://python123.io/ws',data=body)
3)json:JSON格式的数据,作为Request的內容;
>>> kv ={'key1':'valuel','key2':'value2'}
>>> r=requests.request('POST','http://python123.io/ws',json=kv)
4)headers:字典,HTTP定制头,访问HTTP协议头;
>>> hd={'user-agent':'Chrome/10'}
>>> r=requests.request('POST','http://python123.io/ws',headers=hd)
5)cookies:字典或 CookieJar,Request中的 cookie;
6)auth:元组,支持HTTP认证功能;
7)files:字典类型,传输文件,向链接提交文件;
>>>fs={'file':open('data.xls','rb')}
>>> r=requests.request('POST','http://python123.io/ws',files=fs)
8)timeout:设定超时时间,秒为单位,时间内请求内容未反馈,生成timeout异常;
>>> r=requests.request('GET','http://python123.io/ws',time=10)
9)proxies:字典类型,设定访问代理服务器,可以增加登录认证,有效隐藏爬取网站原IP,防止逆追踪;
>>>pxs={'http':'http://user:[email protected]:1234'
'https':'https://10.10.10.1:4321'}
>>> r=requests.request('GET','http://python123.io/ws',proxies=pxs)
10)allow_redirects:True/ False,默认为True,重定向开关;
11)stream:True/false,默认为True,获取内容立即下载开关;
12)verify:True/ False,默认为True,认证SSL证书开关;
13)cert:本地SSL证书路径。
2、requests.get()方法
使用格式:requests.get(url, params=None, **kwargs)
-url:拟获取页面的ur链接
-params:url中的额外参数,字典或字节流格式,可选
-kwargs:12个控制访问的参数,除params
实现原理:get(url)构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Response对象,即Response对象包含爬虫返回的内容。
Response对象属性:
r.apparent_encoding的编码比r.encoding更加准确。
‘utf-8’编码方式可解析中文,ISO-8859-1编码方式不可解析中文。
3、requests.head()方法
使用格式:requests.head(url, **kwargs)
-url:拟获取页面的ur链接
-kwargs:13个控制访问的参数
4、requests.post()方法
使用格式:requests.post(url, data=None,json=None,**kwargs)
-url:拟更新页面的ur链接
-data:字典、字节序列或文件, Request的内容
-json:JSON格式的数据, Request的内容
-kwargs:11个控制访问的参数,除data、json
5、requests.put()方法
使用格式:requests.put(url, data=None,**kwargs)
-url:拟更新页面的ur链接
-data:字典、字节序列或文件, Request的内容
-kwargs:12个控制访问的参数,除data
6、requests.patch()方法
使用格式:requests.patch(url, data=None,**kwargs)
-url:拟更新页面的ur链接
-data:字典、字节序列或文件, Request的内容
-kwargs:12个控制访问的参数,除data
7、requests.delete()方法
使用格式:requests.delete(url, **kwargs)
-url:拟删除页面的ur链接
-kwargs:13个控制访问的参数
import requests
def 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))
●网络爬虫的盗亦有道
规模 | 特点 | 开发 | 应用范围 |
---|---|---|---|
小规模 | 数据量小,爬取速度不敏感 | Requests库 | 爬取网页,玩转网页 |
中规模 | 数据规模较大,爬取速度敏感 | Scrapy库 | 爬取网页,爬取系列网站 |
大规模 | 搜索引擎,爬取速度关键 | 定制开发 | 爬取全网 |
访问量很小:可以遵守;访问量较大:建议遵守 | 非商业且偶尔:建议遵守;商业利益:必须遵守 | 必须遵守 |
---|---|---|
爬取网页,玩转网页 | 爬取网页,爬取系列网站 | 爬取全网 |
●Requests库网络爬虫实战
import requests
url="https://item.jd.com/2967929.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.text[: 1000])
except:
print("爬取失败")
亚马逊商品信息获取(通过判断对网站访问的App头部headers,对网络爬虫限制):
import requests
url="https://www.amazoncn/gp/product/bo1m8l5z3y"
try:
kv = {'user-agent':'Mozilla/5.0'}
r = requests.get(url, headers=kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[1000: 2000])
except:
print("爬取失败")
百度、360搜索关键词提交:
搜索引擎关键词提交接口,修改keyword向搜索引擎提交关键词
百度的关键词接口:
http://www.baidu.com/s?wd=keyword
360的关键词接囗:
http://www.so.com/s?q=keyword
import requests
keyword ="Python"
try:
kv ={'wd': keyword}
r = requests.get("http://www.baiducom/s",params=kv)
print(r.request.url)
r.raise_for_status()
print (len(r.text))
except:
print("爬取失败")
网络图片爬取:
网络图片链接的格式:http://www.example.com/picture.jpg
import requests
import os
url="https://up.enterdesk.com/edpic_360_360/5c/d8/1e/5cd81eca3361148bdf4a528964a4ff9f.jpg"
path = "F:\\"+url.split('/')[-1]
print(path)
try:
if not os.path.exists(path):
r = requests.get(url)
print(r)
with open(path, 'wb')as f:
f.write(r.content)
print("文件保存成功")
f.close()
else:
print("文件已存在")
except:
print("爬取失败")
IP地址归属地的自动查询:
python不具有查询IP地址归属地的功能库,通过网络资源实现。比如:http://m.ip138.com
import requests
url="http://m.ip138.com/ip.asp?ip="
try:
r = requests.get(url+'202.204.80.112')
r.raise_for_status()
r.ncoding =r.apparent_encoding
print(r.text[-500:])
except:
print("爬取失败")