爬虫三

requests中解决编解码问题的办法

response.content.decode()
response.content.decode(“gbk”)
response.text

在这里插入图片描述

处理cookies、session请求(复习)

requests提供了一个叫做session类,来实现客户端和服务端的会话保持

使用方法:
1.实例化一个session对象
2.让session发送get或者post请求

session = requests.session()
response = session.get(url,headers)

如果一个网站的action中没有url地址,我们应该寻找post的url地址

寻找登录的post地址

在form表单中寻找action对应的url地址
post数据是input标签中name的值作为键,真正的用户名密码作为值的字典,post的url地址就是action对应的url地址

在登录过程中首先发送一个rkey、password请求,然后是将这些请求的结果放到post请求群里面,发送post请求

抓包,寻找登录的url地址
勾选perserve按钮,防止页面跳转找不到url地址,或者输入错误的password
寻找post数据,确定参数。参数会变可能在当前的响应中,通过js生成;

定位想要的js

选择会触发js事件的按钮,点击event lisenter,找到js的位置
通过chrome中的search all file来搜索url中的关键字
添加断点的操作查看js的操作,通过python来进行同样的操作

requests小技巧

1.requests.util.dict_from_cookiejar 把cookie对象转化为字典

import requests

#requests.utils.unquote("url编码")    #url地址解码
#requests.utils.quote("url")   #url地址编码

response = requests.get("https://baidu.com")
print(response.cookies)
print(requests.utils.dict_from_cookiejar(response.cookies))
print(requests.utils.cookiejar_from_dict({'BDORZ': '27315'}))   #字典转化成cookie,仅仅传入了一堆键值对,会造成cookie的缺失

运行结果:
在这里插入图片描述

2.请求SSL证书验证
response = requests.get(“https:// …”,verify = False)
如果某https网站没有SSL认证证书的话,想要拿到直接的requests会报错(SSLError),这个时候veritf = False就可以跳过证书获取响应,默认verify是True

3.设置超时
response = requests.get(url,timeout = 10)
超时参数:强制要求响应在指定的时间内执行完
在实际生活中我们如果发现某个网站不能请求,我们会刷新,我们要导入一个retrying模块
在这里插入图片描述

4.配合状态码判断是否请求成功
assert response.status——code = 200

下面我们来通过一个例子整体看一下以上4点的用法:

import requests
from retrying import retry

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36"}
@retry(stop_max_attempt_number=3)
def _parse_url(url):
    #为了看到执行的次数,我们在这里可以print一些语句
    response = requests.get(url,headers = headers,timeout = 3)
    assert response.status_code == 200
    return response.content.decode()

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"
    print(parse_url(url))

数据的分类

数据提取: 简单的来说就是从响应中获得我们想要的数据的过程
非结构化数据:html等
处理方法:正则表达式、xpath

结构化数据:json、xml等
处理方法:转化为python数据类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值