前言
本文只讲简单requests的一些东西,要是想学习爬虫,我的另一篇文章
先说下网站爬取过程:
1)有要爬取网站的网址url;
2)检查元素(F12),查看源码找到想爬取的资源(文本、网址、、、)
3)代码部分,get请求网址,数据位置(标签索引)
4)保存爬取的数组(保存到本地)
简单爬取就这些东西
页面元素
检查元素、查看网页源代码、F12
面板(部分):
面板 | 说明 |
---|---|
元素面板(Elements) | 网页文本内容,使用元素面板可以自由的操作DOM和CSS来迭代布局和设计页面 |
控制台面板(Console) | 该面板记录各种警告与错误信息,并可作为shell在页面上与JavaScript交互 |
网络面板(Network) | 可查看页面请求、下载的资源文件、以及优化网页加载性能 |
在网页能看见的数据能在元素面板获取
网络面板中获取User-Agent、cookies,这些东西会用到
然后还有就是,如下图:
进去一个网站在元素中找到所要的数据后,需要进一步查看以下信息:
1、选择网络栏(NetWork)
2、找到本页面网站的选项
3、查看url
4、查看请求类型,get或post,大多是get
5、网站数据格式,一般是text或json
Requests库请求
直接上代码:
url = 'https://movie.douban.com/chart' #豆瓣排行榜的网址
#设置请求头
hd = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.62'
#生成get请求
r = requests.get(url,headers=hd)
#获取元素面板文本
text = r.content.decode('utf-8')
#content 二进制
#decode 编码格式('utf-8','gbk')一般都是这两种
'''这两行代码等价于上行
r.encoding = 'utf-8'
text = r.text
'''
print(text)
输出结果
get 方法是可以向服务器发送信息的,除了可以请求需要的页面(url)之外,也可以发送我们指定的内容
headers参数(字典):模拟浏览器登录,User-Agent:用户代理、Cookie:做用户访问状态的保持,用在用户登录
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
'Cookie': '_octooz7h3ni%2FGlaRFR3ETrDvuhKiiUgJP8jStjNLNiFfpvWQy7U10IGCY15XhHxudYu3tRlt%2Fawt4SHEaDct0LNUQ%2B%2Fi2rHiCLVsL1Y8w%2BC9HpTtd2S6gxDLzfHK5dvBPc4TB6WDn%2BaRt9ljs4lSdlT0mn--qas9T0w68J9araMi--Se2WerqwQ6PlXV5xa2W9lw%3D%3D'
}
cookies可以在Network面板中获取
cookies参数
示例:
cookie = {
'__cfduid':"d3dbaf9b94d0d23daa6b3cb26cf79242c1621331340",
'__yjs_duid':"1_ad976dbfb5297c53ae1f2b995a9fe7371620895017180",
'Hm_lpvt_2c6cc9163dcd6f496c48a6b8ac043309':"1621336831",
'Hm_lvt_2c6cc9163dcd6f496c48a6b8ac043309':"1621316608,1621336294,1621336595,1621336821",
'PHPSESSID':"k39e67jndp98visgouhvclrb77",
'trennlastsearchtime':"1621331611",
'trennmlauth':"a45766ed6525d97dae8c035f3fd05ef8",
'trennmlgroupid':"3",
'trennmlrnd':"CCL36aDXfcQqN7D5X5kn",
'trennmluserid':"13977",
'trennmlusername':"LZT"}
#对于cookie获取必须先登录才会有
re = requests.get("https://www.4kbizhi.com/wallpaper/7433-original.html",cookies=cookie)
#这样可以用户登录访问网址
params 参数(字典):添加在网址url后面,常用在模拟搜索
import requests
url = 'https://www.baidu.com/s' #最后有个 s,这个才是搜索的网址
hd = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.62'
}
params = {
'wd': '明日方舟'
}
re = requests.get(url,params=params,headers=hd)
print(re.url)
结果:
https://www.baidu.com/s?wd=%E6%98%8E%E6%97%A5%E6%96%B9%E8%88%9F
这是编码后的结果,节码后就是:
https://www.baidu.com/s?wd=明日方舟
timeout参数(小数):
为避免因等待服务器响应时间过长造成程序永久失去响应,超过参数值(该时间)后程序讲自动停止等待
proxies(代理参数):
定义: 代替你原来的IP地址去对接网络的IP地址。
作用: 隐藏自身真实IP,避免被封
语法结构
proxies = {
'协议':['协议://]IP:端口号'
}
例:
proxies = {
'http':'112.85.164.220'
'http':'http://112.85.164.220:9999',
'https':'https://112.85.164.220:9999'
}
当然了这些网页里提供的代理IP大多数因为用的人太多了不能用,比如西刺代理里面的ip,用爬虫爬了1000多个下来能用的居然只有80多个,过两天一个又有好多不行了,一般大一些公司会给你提供专门的资金去购买代理IP,如果没有的话就好好的积累积累自己的IP池吧
verify(SSL证书认证参数)
适用网站: https类型网站但是没有经过 证书认证机构 认证的网站
适用场景: 抛出 SSLError 异常则考虑使用此参数
verify=True(默认) : 检查证书认证
verify=False(常用): 忽略证书认证
一般这个不用管
auth(Web客户端验证参数)
1、针对于需要web客户端用户名密码认证的网站
2、auth = (‘username’,‘password’)