爬虫基础--requests库(获取网页信息)
官网文档–http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
发送get,post请求
- res=requests.get(url) #发送get请求,请求url地址对应的响应
- res=requests.post(url,data={请求的字典}) #发送post请求
#post请求
import requests
url="http://fanyi.baidu.com/sug"
data={'kw':'早上好'}#该字典键值对的形式可以通过form data中查询
headers={
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Mobile Safari/537.36"
}
res=requests.post(url,data=data,headers=headers)
print(res.text)
response方法
- res.text(该方法往往会出现乱码,出现乱码使用res.encoding=’utf-8’ 或者res.encoding=res.apparent_encoding)
- res.content.decode(‘utf-8’)#或者’gbk’
- res.json() #针对响应为json字符串解码为python字典
- res.request.url #发送请求的url地址
- res.url #res响应的url地址(页面跳转时,请求的url地址与真正打开的url地址是不同的)
- res.request.headers #请求头
- res.headers #res响应头
发送带有header的请求
headers={请求体}#User-agent>>>Referer>>Cookie
-为了模拟浏览器,获取和浏览器一样的内容
超时参数 timeout
requests.get(url,headers=headers,timeout=3) #3秒内必须返回响应,否则会报错
一般为了避免再发出请求过程中出现异常而中断请求,一般采用retrying中的retry函数(作为装饰器调用)
from retrying import retry
import requests
@retry(stop_max_attempt_number=3) #让被装饰的函数反复执行三次,三次全部报错才会报错;中间有一次正常,程序继续执行
def _parse_url(url):
print("打印效果")
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
}
res=requests.get(url,headers=headers,timeout=5)
# print(res.content.decode('utf-8'))
print(res.status_code)
#增加异常处理
def parse_url(url):
try:
html_str=_parse_url(url)
except:
html_str=None
return html_str
if __name__ == '__main__':
url = 'http://www.baidu.com'
parse_url(url)
处理cookie请求
直接携带cookie请求url地址
1.cookie放在headers中
2.cookie字典传给cookies参数
cookie=”….”#通过字典推导式得到
cookie_dict={i.split(“=”)[0]: i.split(“=”)[1] for i in cookie.split(“;”)}
requests.get(url,headers=headers,cookies=cookie_dict)-
先发送post请求,获取cookie,带上cookie请求登陆后的页面 —requests.session() 会话保持
1.实例化session
session=requests.session()#此时session实例同requests一样
2.session.post(url,data,headers)#服务器设置在本地的cookie会被保存在被session中注意post请求的url可以通过两种方式获取:
-查看该登陆页面的源代码,找到form表单中的action提交的链接 -在登陆页面的NETWORK中勾选Perserver log,然后再页面跳转后找到post请求的url
3.session.get(url)#发出get请求会带上之前保存在session中的cookie,能够请求成功
#爬去人人网信息
#方法1--没有cookie的html信息
import requests
url="http://zhibo.renren.com/top"
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
}
res=requests.get(url,headers=headers,timeout=5)
with open('renren1.html','w',encoding='utf-8') as f:
f.write(res.content.decode())
#方法2---在headers中放入cookie(在html中nx.user会出现用户名)
import requests
url="http://zhibo.renren.com/top"
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
"Cookie":"anonymid=jf3bo25ktzrg8e; depovince=SH; _r01_=1; ick_login=89a0be82-b23f-4aa2-9587-80b352b7d64f; _de=ED5538112FD97F3944B0A57815E527E7696BF75400CE19CC; ick=cb553aab-cde4-413f-864d-25644c96ea00; __utma=151146938.1210742990.1521771869.1521771869.1521771869.1; __utmc=151146938; __utmz=151146938.1521771869.1.1.utmcsr=renren.com|utmccn=(referral)|utmcmd=referral|utmcct=/; __utmt=1; __utmb=151146938.1.10.1521771869; t=5812e6c25a16acd7d295e245218a8cd49; societyguester=5812e6c25a16acd7d295e245218a8cd49; id=964865629; xnsid=af52771f; XNESSESSIONID=292a42dae8f0; WebOnLineNotice_964865629=1; ch_id=10016; JSESSIONID=abcJKBMLTnzbs_aP1Rqjw; springskin=set; vip=1; wp_fold=0; jebecookies=cdb11dcd-461b-46e2-bfc5-9548dbe6a95e|||||"
}
res=requests.get(url,headers=headers,timeout=5)
with open('renren2.html','w',encoding='utf-8') as f:
f.write(res.content.decode())
#方法3--requests.session方法
import requests
session=requests.session()#实例化session
post_url="http://www.renren.com/PLogin.do" #此处的url地址是form表单中action的地址
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
}
post_data={
'email':'17612167260',
'password':'068499'}
session.post(url,headers=headers,data=post_data)#使用session发送post请求,获取保存在本地的cookie
url="http://zhibo.renren.com/top"#次数的url是登陆页面的url
res=session.get(url,headers=headers)#使用session,请求登陆后的页面
with open('renren3.html','w',encoding='utf-8') as f:
f.write(res.content.decode())
上传文件 files
import requests
#建立files文件字典
dict_files={"file":open(r"C:\Users\poliy\Desktop\Crawler\1.png","rb")}
response=requests.post("http://httpbin.org/post",files=dict_files)
print(response.text)
证书认证 (12306证书认证)
#方法1---设置verify=False,并取消提示警告
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
res=requests.get("https://www.12306.cn",verify=False)
print(res.status_code)
#方法2--通过cert参数放入证书路径
res=requests.get("https://www.12306.cn",cert='PATH')
设置代理
import requests
my_proxies={
"http":"http://61.135.217.7:80",
"https":"https://42.96.168.79:8888"
}
res=requests.get("https://www.baidu.com",proxies=my_proxies)
print(res.text)
异常处理
requests的异常都在requests.exceptions中
import requests
from requests.exceptions import ReadTimeout,ConnectionError,RequestException
try:
res=requests.get("http://httpbin.org/get",timeout=0.1)
print(res.status_code)
except ReadTimeout:
print("timeout")
except ConnectionError:
print("timeout")
except RequestException:
print("error")
上一篇: Maximum Subarray II
下一篇: tp5 each()与分页
推荐阅读
-
python爬虫:使用xpath和find两种方式分别实现使用requests_html库爬取网页中的内容
-
python 爬虫 5i5j房屋信息 获取并存储到数据库
-
认识爬虫:如何使用 requests 模块模拟浏览器请求爬取网页信息?
-
Python爬虫之Urllib库使用(一):爬取、保存页面、获取请求信息
-
python爬虫基础 使用urllib库抓取高德接口边界信息
-
爬虫基础:lxml与requests库, 使用爬虫获取一个确定的简单信息
-
爬虫基础--requests库(获取网页信息)
-
python爬虫基础教程:requests库(二)代码实例
-
Golang---goquery爬虫获取golang语言中文网页面信息并保存MySQL
-
ASP.NET网络爬虫小研究 HtmlAgilityPack基础,爬取数据保存在数据库中再显示再自己的网页中