python 爬虫系列02 认识 requests

来源:转载


本系列所有文章基于 python3.5.2



requests 是基于 urllib 的三方模块,相比于 uillib, 操作更简洁,功能更强大,而且支持 python3


GET

直接调用 get 方法请求百度贴吧首页


import requests
r = requests.get(url='https://tieba.baidu.com/f')
print(r.status_code)
print(r.text)

得到如下结果:


200
...


...
POST

post 方法与 get 类似,直接调用即可


r = requests.post(url='https://tieba.baidu.com/f', params=params)

如果 post 上传数据,数据转换为 bytes 放在 data 字段即可


import requests
import json
upload_url = '***'
r = requests.post(upload_url, data=json.dumps({'some': 'data'}))
Headers

加上 HTTP 请求头也很简单,只需把各个参数作为写入 dict 传给 headers 参数即可
下面模拟浏览器请求中国天气网数据


import requests
url = 'http://www.weather.com.cn/weather/101010100.shtml'
header = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3226.400 QQBrowser/9.6.11681.400'
}
req = requests.get(url, headers=header)
req.encoding = 'utf-8' # 防止乱码
print(req.status_code)
print(req.text)

得到如下 HTTP 响应:


200
...

【北京天气】北京天气预报,蓝天,蓝天预报,雾霾,雾霾消散,天气预报一周,天气预报15天查询
...
异常, JSON 解码
URL = 'http://ip.taobao.com/service/getIpInfo.php'# 淘宝IP地址库API
try:
r = requests.get(URL, params={'ip': '49.4.168.222'}, timeout=5)
r.raise_for_status()# 如果响应状态码不是 200,就主动抛出异常
except requests.RequestException as e:
print(e)
else:
result = r.json() # Requests中内置的JSON解码器
print(type(result), result, sep='/n')

得到结果:


{'code': 0, 'data': {'region_id': '110000', 'isp_id': '100017', 'county': '', 'city_id': '110100', 'region': '北京市', 'area_id': '100000', 'country_id': 'CN', 'city': '北京市', 'country': '中国', 'area': '华北', 'county_id': '-1', 'ip': '49.4.168.222', 'isp': '电信'}}
cookies

如果某个响应中包含 cookie ,可以快速的访问他们


import requests
r = requests.get('http://www.baidu.com', timeout=5)
print(tuple(r.cookies))

得到如下结果:


(Cookie(version=0, name='BDORZ', value='27315', port=None, port_specified=False, domain='.baidu.com'...

要想发送你的 cookies 到服务器,可以使用 cookies 参数:


cookies = {'BDUSS': 'n5-fjRvZ95b...', 'ispeed_lsm': '2', 'BD_UPN': '1a314753'} # 具体内容可用 fiddler 抓包获取
r = requests.get('http://www.baidu.com', cookies=cookies,timeout=5)
print(r.status_code)



分享给朋友:
您可能感兴趣的文章:
随机阅读: