1、requests介绍
1.1 什么是requests?
用于访问网页(url)的工具包
1.2 如何安装?
首先检查自己有没有requests:pip show
如果没有,直接安装:pip install requests,
如果安装存在问题,可以使用镜像进行安装,pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
1.3 如何导入requests:
在编写代码的窗口顶部输入:import requests
2. 发送url请求
以豆瓣读书网为例:https://book.douban.com/tag/%E7%BB%8F%E5%85%B8
2.1 直接访问
2.2 响应信息解读
2.2.1 状态码
豆瓣现在需要浏览器请求(响应头)头还可以进行访问,否则就是会请求失败
2.2.2 响应头
这个是系统生成的请求头,并不是一种浏览器访问情况下的请求头,因此是无效了(会被屏蔽掉)
如果要获得浏览器的请求头,可以打开浏览器,在目标页面打开检查选项,选择network后刷新页面,这时候network左下方的Name栏会出现一些页面,选择其中的一个,把界面往下拉最后面就是了,如下
加入浏览器请求头后,输出的结果如下(状态码为200,代码可以正常请求网页信息了)
2.2.3 网页编码
注意:如果网页出现乱码,一般是编码出现问题
如何查看真实编码?
一劳永逸解决编码问题,也就是编码格式等于现在网页的编码格式,如下面的最后一行代码所示
2.2.4 源代码内容
3. 如何设置登录信息 → cookie
3.1 首先登陆网页
cookie,有时也用其复数形式 cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。有些网站如果没有cookie是不允许进行数据的爬取的,要想获得cookies,第一步就是要进行登录,
如果没有账户的话,可以在欲爬取的网站上注册一个即可,登录完毕后,进行下一步
3.2 查找【Requests Headers】
cookie信息的查找和之前的headers的查找是一致的,这里就不再进行叙述了,直接把流程贴出来:鼠标右键 → 检查 → 找到【Network】→【刷新 】 → 选择【Doc】 → 选择【Headers】 → 找到【Requests Headers】,如下
3.3 构建一个函数,将cookies信息变成一个字典
之前是直接将请求头放在字典里,接下来就是将cookies里面的内容也设置成为字典,这里就不方便手动操作了,示例就是上面的cookies,代码如下
cookies = 'll="108296"; bid=b9z-Z1JF8wQ; _vwo_uuid_v2=DDF408830197B90007427EFEAB67DF985|b500ed9e7e3b5f6efec01c709b7000c3; douban-fav-remind=1; __yadk_uid=2D7qqvQghjfgVOD0jdPUlybUNa2MBZbz; gr_user_id=5943e535-83de-4105-b840-65b7a0cc92e1; dbcl2="150296873:VHh1cXhumGU"; push_noty_num=0; push_doumail_num=0; __utmv=30149280.15029; __gads=ID=dcc053bfe97d2b3c:T=1579101910:S=ALNI_Ma5JEn6w7PLu-iTttZOFRZbG4sHCw; ct=y; Hm_lvt_cfafef0aa0076ffb1a7838fd772f844d=1579102240; __utmz=81379588.1579138975.5.5.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; __utmz=30149280.1579162528.9.8.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; ck=csBn; _pk_ref.100001.3ac3=%5B%22%22%2C%22%22%2C1580991742%2C%22https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DNq2xYeTOYsYNs1a4LeFRmxqwD_0zDOBN253fDrX-5wRdwrQqUpYGFSmifESD4TLN%26wd%3D%26eqid%3De7868ab7001090b7000000035e1fbf95%22%5D; _pk_id.100001.3ac3=6ec264aefc5132a2.1571800818.8.1580991742.1580979329.; _pk_ses.100001.3ac3=*; __utma=30149280.195590675.1570957615.1580979329.1580991743.12; __utmc=30149280; __utmt_douban=1; __utmb=30149280.1.10.1580991743; __utma=81379588.834351582.1571800818.1580979329.1580991743.8; __utmc=81379588; __utmt=1; __utmb=81379588.1.10.1580991743; ap_v=0,6.0'
cookies_lst = cookies.split("; ")
dic_cookies = {}
for i in cookies_lst:
dic_cookies[i.split("=")[0]] = i.split("=")[1]
print(dic_cookies)
输出的cookies字典如下
3.4 将headers和cookies写入到requests.get()里
接上面的代码,然后在requests.get()里面添加相应的信息
res = requests.get(url, headers = headers_dic, cookies = cookies_dic)
3.5 一些注意点
一般情况,一个机构/平台的网页,用一个headers登录信息足够
对于复杂的网页,【分页网页】使用一个headers信息,【数据信息网页】使用一个headers信息
● headers_dic里面是允许存放多个键值对,也就是多个浏览器的请求头的
4. 错误与异常解决
4.1 什么时候会出现错误异常?
连不上服务器
远程的服务不存在
BeautifulSoup解析网页标签时,由于数据源问题,无法准确识别
4.2 处理方法
try…except…语句
目的是什么?
报错情况下,爬虫继续进行
示例
● 有5个网址需要访问,其中第三和四个由于网址错误,不进行报错处理,在第3个网页访问时报错,导致程序无法进行下去,爬虫中断
通过try…except…实现,即使存在部分网址错误,也不影响爬虫的继续,代码如下