绕过反爬机制的方法

●站长素材高清图片下载
        ■反爬机制:图片懒加载,广泛应用在了一些图片的网站中。
                只有当图片被显示在浏览器可视化范围之内才会将img的伪属性变成真正的属性。如果是requests发起的请求,requests请求是没有可视化范围,因此我们-一定要解析的是img伪属性的属性值(图片地址)
        ●学过的反爬机制.
                ■robots
                ■UA伪装
                ■动态加载数据的捕获
                ■图片懒加载

●cookie
●代理机制
●验证码的识别
●模拟登录

        ●cookie:
                ■是存储在客户端的一组键值对。
                ■web中cookie的典 型应用:
                        - 免密登录
                ■cookie和爬虫之间的关联
                        - sometimes, 对一张页面进行请求的时候,如果请求的过程中不携带cookie的话,那么我们是无法请求到正确的页面数据。因此cookie是爬虫中-一个非常典型且常见的反爬机制。

        ●需求:爬取雪球网中的咨询信息。 https://xueqiu.com/
        ●分析:
                ■1.判定爬取的咨询数据是否为动态加载的
         - 相关的更多咨询数据是动态加载的,滚轮滑动到底部的时候会动态加载出更多咨询数据。
                ■2.定位到ajax请求的数据包,提取出请求的url,响应数据为json形式的咨询数据

         ●问题:我们没有请求到我们想要的数据
        ●原因:我们没有严格意义上模拟浏览器发请求。
                ■处理:可以将浏览器发请求携带的请求头,全部粘贴在headers字典中,将headers作用到requests的请求操作中即可。
        ●cookie的处理方式
                ■方式1:手动处理
                。将抓包工具中的cookie粘贴在headers中
                。弊端: cookie如果过了有效时长则该方式失效。
                ■方式2:自动处理
                。基于Session对象实现自动处理。
                。如何获取- -个session对象: requests Session0返回- -个session对象。
                。session对象的作用:
                。该对象可以向requests- -样调用get和post发起指定的请求。只不过如果在使用session发请求的过程中如果产生了cookie,则cookie会 被自动存储到该session对象中,那么就意味着下次再次使用session对象发起请求,则该次请求就是携带cookie进行的请求发送。
                。在爬虫中使用session的时候,session对象至 少会被使用几次?
                。两次。第一次使用session是为了将ookie捕获且存储到session对象中。 下次的时候就是携带cookie进行的请求发送。

session = requests.Sessiom()
mainUrl = "主页网址获取cookie"
# 第一次发请求获取cookie
session.get(mainUrl, headers=headers)

# 第二次发请求会携带cookie
url = "需要爬取的网址"
pageText = session.get(url, headers=headers).json()

        ●代理机制操作

                ■在爬虫中,所谓的代理指的是什么?
                        。就是代理服务器
                ■代理服务器的作用是什么?
                        。就是用来转发请求和响应。
                ■在爬虫中为什么需要使用代理服务器?
                        。如果我们的爬虫在短时间内对服务器发起了高频的请求,那么服务器会检测到这样的一个异常的行为请求,就会将该请求对应设备的ip禁掉,就以为这client设备 无法对服务器端再次进行请求发送。(ip被禁掉了)
                        。如果ip被禁, 我们就可以用代理服务器进行请求转发,破解ip被禁的反爬机制。因为使用代理后,服务器端接受到的请求对应的ip地址就是代理服务器而不是我们真正的客户端的。
                ■代理服务器分为不同的匿名度:
                        。透明代理:如果使用了该形式的代理,服务器端知道你使用了代理机制也知道你的真实ip。
                        。匿名代理:知道你使用代理,但是不知道你的真实ip
                        。高匿代理:不知道你使用了代理也不知道你的真实ip
                ■代理的类型
                        。https: 代理只能转发https协议的请求
                        。http: 转发http的请求
                ■代理服务器:
                        。快代理
                        。西祠代理
                        。goubanjia
                        。代理精灵(推荐) : http://http.zhiliandaili.cn

# ●封装一个代理池
from 1xml import etree
url = '代理端口的网址'
page_text = requests.get(ur1,headers=headers).text
tree = etree.HTML(page_text)
proxy_list = tree.xpath('//body//text()')
http_proxy = []  # 代理池
for proxy in proxy_list:
    dic = {
        'http' : proxy
    }
    http_proxy.append(dic)
http_proxy
# ●使用代理机制破解ip被封的效果
#ur1模板
url = 'https://www.xicidaili.com/nn/%d '
ips = []
for page in range(1,11):
    new_url = format(ur1%page)
    #让当次的请求使用代理机制,就可以更换请求的ip地址
    # page_text = requests.get(url=new_url, headers=headers, proxies={'http':ip:port}).text
    page_text = requests.get(url=new_url, headers=headers, proxies=random.choies(http_proxy)).text
    tree = etree.HTML(page_text)
    #在xpath表达式中不可以出现tbody标签
    tr_1ist = tree.xpath('//*[@id="ip_list"]//tr')[1:]
    for tr in tr_list:
        ip = tr.xpath('./td[2]/text()')[0]
        ips .append(ip)
print(1en(ips))

         ●验证码的识别
                基于线上的打码平台识别验证码
                打码平台
                        - 1.超级鹰(使用) : http://www。chaojiying. com/ about。html
                                - 1.注册[用户中心的身份]
                                - 2.登录(用户中心的身份)
                                        - 1.查询余额,请充值
                                        - 2.创建一个软件ID (899370)
                                        - 3.下载一个示例代码
                        - 2.云打码
                        - 3.打码兔

        ●模拟登录
                ■流程:
                。对点击登录按钮对应的请求进行发送(post请求)
                。处理请求参数:
                        。用户名
                        。密码
                        。验证码
                        。其他的防伪参数

        ●在请求参数中如果看到了- -组乱序的请求参数,最好去验证码这组请求参数是否为动态变化。
        ●处理:
                ■方式1:常规来讲一 半动态变化的请求参数会被隐藏在前台页面中,那么我们就要去前台页面源码中取找。
                ■方式2:如果前台页面没有的话,我们就可以基于抓包工具进行全局搜索。

#识别验证码
login_url = '登录的URL'
data = {
    'VIEWSTATE' : '41QUDYGYp480//d8dSe+k037Ut9i jESlrJJLPgCESA+C4 EAmEQV4h+p/G4 sKwsGz2mFd',
    'VIEWSTATEGENERATOR' : 'C93BE1AE' ,
    'from' : 'http://so.gushiwen.org/user/collect.aspx',
    'email' : 'www.zhangbowudieqq.com',
    'pwd' : bobo328410948',
    'code': '验证码',   #动态变化
    'denglu' : '登录',
}
#对点击登录按钮发起请求:获取了登录成功后对应的页面源码数据
page_text_login = requests.post(url=login_ur1, headers=headers,data=data).text

        ●基于百度AI实现的爬虫功能
                ■图像识别
                ■语音识别&合成
                ■自然语言处理
        ●使用流程:
                ■点击控制台进行登录
                ■选择想要实现的功能
                ■实现功能下创建一个app
                ■选择对应的pythonSDK文档进行代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值