requests.get(url, parm, *kwags)
url:网页的url链接
parm:url中的额外参数,字典或字节流的格式,可选
kwags:12个控制访问的参数
属性 | 说明 |
---|---|
r.stauts_code | HTTP请求的返回状态200表示成功,其他数值则是失败 |
r.text | HTTP请求的相应内容,是字符串形式,也即url页面内容 |
t.encoding | 从HTTPheader中猜测的编码方式 |
r.apparent_encoding | 从返回内容中分析的编码方式 |
r.content | HTTP响应内容的二进制形式 |
r.encoding和r.apparent_encoding的区别:有的服务器对编码是有要求的则header中会有charset字段,如果没有则默认为ISO-8859-1,而apparent_encoding则是分析内容来解析信息。
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接错误,如DNS无效,域名无效等 |
requests.HTTPError | HTTP、异常 |
requests.URLError | URL异常 |
requests.ConnectTimeout | 服务器连接超时 |
requests.Timeout | URL请求超时 |
r.raise_for_status() | 若r.status_code返回不是200,则产生HTTPError |
import requests def getHTMLText(url): try: r = requests.get(url) r.raise_staus_code() r.encoding = r.apparent_encoding return r.text except: return "产生异常"
HTTP协议方法 | requests库 | 说明 |
---|---|---|
GET | requests.get() | 获取资源 |
HEAD | requests.head() | 获取资源的头部信息 |
PUT | requests.put() | 在URL对应的资源后添加资源 |
POST | requests.post() | 对URL的资源进行覆盖 |
PATCH | requests.patch() | 对URL的部分内容更新 |
DELETE | requests.delete() | 删除URL的资源 |
patch和put的区别,patch是将部分资源进行局部更新,而put则是全覆盖,没有更新的自动做删除处理。
method:方法的参数即包含GET等等。而get等方法即已经得到封装的request方法。
url:URL链接
**kwags:12个参数,分别实现不同功能
kv = {'key1':'vaule1','key2':'vaule2'} r = requests.request('GET',"https:/python123.io/ws", params = kv) >>> "https:/python123.io/ws?key1=vaule1&key2=vaule2"
kv = {'key1':'vaule1','key2':'vaule2'} r = requests.request('POST',"https:/python123.io", data = kv)
kv = {'key1':'value1'} r = requests.request('POST',"https:/python123.io", json=kv)
hd = {'user-agent':'chrome/10'} r = requests.request('GET', 'https:/python123.io', headers=hd)
fi = {'file': open('data.txt','rb')} r = requests.request('POST','https:/python123.io', files=fi)
r = requests.request('GET', 'https:/python123.io', timeout=10)
px = {'HTTP':'http://user@10.10.1.1234'\ 'HTTPS':'https://1.0.1.0.4321'} r = requests.request('GET', 'https:/python123.io', proxies = px)
对网络爬虫进行限制:
在网站的根目录下写一个叫Robots.txt的文件。
如果没有Robots.txt文件,则表示网站允许所有爬虫爬取所有的内容。
user_agent: #这里表示爬虫的名字,全部则为* disallow: # 这里表示不允许爬取的目录,全部则为/ 表示根目录
网络的爬虫应该能自动识别并遵守Robots协议。如果不遵守,则存在法律风险。
对服务器的访问一天只存在几次访问,类似于人类的行为,则原则上可以不遵守Robots协议。
import requests url = "https://item.jd.com/2967929.html" try: r = requests.request('GET', url, headers = {'ueser-agent':'chrome/12'}) r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[:1000]) except: print("访问出错")
注意:京东商品被限制需要登陆才能爬取,所以这里应该是得不到结果的。
2. 亚马逊商品爬取
import requests url = 'https://www.amazon.cn/dp/B0864LWWX9/ref=lp_665002051_1_2' try: r = requests.request('GET', url, headers={'user-agent':'Nozilla/5.0'}) r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[:1000]) except: print('爬取错误')
注意:亚马逊商品的爬取因为有保护,必须要修改user-agent才能进行访问
3. 百度和360爬取
import requests url1 = "http://www.baidu.com/s" url2 = "http://www.so.com/s" keyword1 = {'wd':'python'} keyword2 = {'q':'python'} try: r1 = requests.request('GET', url1, params = keyword1) r2 = requests.request('GET', url2, params = keyword2) print(r1.request.url) print(r2.request.url) r1.raise_for_status() r2.raise_for_status() r1.encoding = r1.apparent_encoding r2.encoding = r2.apparent_encoding print(r1.text[:1000]) print(r2.text[:1000]) except: print("爬取失败")
注意:百度和360最后的格式分别是 "/s?wd = keyword"和"/s?q = keyword",所以可以使用params进行直接在URL后的操作
4. 图片下载
import requests import os url = "https://w.wallhaven.cc/full/pk/wallhaven-pkkm6p.png" root ="C://Users//ADM//Pictures//"#其实用的是默认图片路径涉及隐私所以改了一点 path = root + url.split('/')[-1] try: if not os.path.exists(root): os.mkpath(root) if not os.path.exists(path): r = requests.request('GET', url) with open(path, 'wb') as f: f.write(r.content) f.close() else: print("file has already existed!") except: print("ERROR!")
需要注意:图片是二进制文件,必须要用r.content来返回。然后就是必须事先建立好文件,然后再进行写入操作。
5. IP地址的查询
import requests IP = "202.204.80.112" url = "https://m.ip138.com/iplookup.asp?ip=" try: r = requests.request('GET',url+IP, headers= {'user-agent':'chrome/10'}) print(r.request.url) r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[2400:2500]) except: print("爬取错误!")
这里要注意,也要对协议头中的user-agent字段进行修改,否则爬取不成功。
以上内容来自北京理工大学嵩天老师及其团队的《Python网络爬虫与信息提取》课程第一周的内容。
非常感谢嵩天老师及其团队给我们带来这样优质的课程。
课程链接