设为首页 加入收藏

TOP

Python爬虫(学习笔记)(一)
2023-07-23 13:45:23 】 浏览:94
Tags:Python 爬虫 习笔记

Python爬虫(学习笔记)

 

 

常见的反爬机制及应对策略

名称

描述

解决方案/反反爬措施

1.Headers

 

从用户的headers进行反爬是最常见的反爬策略,Headers是一种最常见的反爬机制Headers是一种区分浏览器行为和机器行为中最简单的方法,还有一些网站会对Referer (上级链接)进行检测 从而实现爬虫。

相应的解决措施:通过审查元素或者开发者工具获取相应的headers 然后把相应的headers 传输python 的requests,这样就能很好地绕过。

2.IP 限制

 

 一些网站会根据你的IP 地址访问的频率,次数进行反爬。也就是说如果你用单一的IP 地址访问频率过高,那么服务器会在短时间内禁止这个IP 访问。

解决措施:构造自己的IP 代理池,然后每次访问时随机选择代理(但一些IP 地址不是非常稳定,需要经常检查更新)。

3. UA 限制

 

UA 是用户访问网站时候的浏览器标识,其反爬机制与ip 限制类似。

 解决措施:构造自己的UA 池,每次python 做requests 访问时随机挂上UA 标识,更好地模拟浏览器行为。当然如果反爬对时间还有限制的话,可以在requests 设置timeout(最好是随机休眠,这样会更安全稳定,time.sleep())。

 

4.验证码反爬虫或者模拟登陆  

 

验证码:这个办法也是相当古老并且相当的有效果,如果一个爬虫要解释一个验证码中的内容,这在以前通过简单的图像识别是可以完成的,但是就现在来讲,验证码的干扰线,噪点都很多,甚至还出现了人类都难以认识的验证码

解决措施:验证码识别的基本方法:截图,二值化、中值滤波去噪、分割、紧缩重排(让高矮统一)、字库特征匹配识别。(python 的PIL 库或者其他)模拟登陆(例如知乎等):用好python requests 中的session

5.Ajax 动态加载  

 

网页的不希望被爬虫拿到的数据使用Ajax 动态加载,这样就为爬虫造成了绝大的麻烦,如果一个爬虫不具备js 引擎,或者具备js 引擎,但是没有处理js 返回的方案,或者是具备了js 引擎,但是没办法让站点显示启用脚本设置。基于这些情况,ajax 动态加载反制爬虫还是相当有效的。

Ajax 动态加载的工作原理是:从网页的url 加载网页的源代码之后,会在浏览器里执行java script程序。这些程序会加载出更多的内容,并把这些内容传输到网页中。

 

解决策略:若使用审查元素分析”请求“对应的链接(方法:右键→审查元素→Network→清空,点

 

击”加载更多“,出现对应的GET 链接寻找Type 为text/html 的,点击,查看get 参数或者复制Request

URL),循环过程。如果“请求”之前有页面,依据上一步的网址进行分析推导第1 页。以此类推,抓取Ajax 地址的数据。对返回的json 使用requests 中的json 进行解析,使用eva l()转成字典处理fiddler 可以格式化输出json 数据。

 

6.cookie 限制

 

一次打开网页会生成一个随机cookie,如果再次打开网页这个cookie 不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了。

解决措施:在headers 挂上相应的cookie 或者根据其方法进行构造(例如从中选取几个字母进行构造)。如果过于复杂,可以考虑使用selenium 模块(可以完全模拟浏览器行为)

代理IP:一种反反爬机制

作用

突破封IP的反爬机制

什么是代理

代理服务器

先将请求发送至代理服务器,再由代理服务器发送至目标服务器

代理的作用

突破自身IP的访问限制

隐藏真实IP

代理相关网站

www.goubanjia.com

快代理

西祠代理

代理IP的种类

http:适用于http协议的URL访问中

https:应用到https协议的URL访问中

代理IP的匿名度

透明:服务器直到该次请求使用了代理,也知道请求对应的真实IP

匿名:知道使用了代理,但是不知道真实的IP

高匿名:不知道使用了代理,也不知道真实IP

模拟登录session

模拟登录

爬取基于某些用户的用户信息

没有请求到数据的原因

发起的第二次基于个人主页的页面请求的时候,服务器端并不知道该次请求是基于登录状态下的请求;

http、https协议特性

无状态

cookie

用来让服务器端记录客户端的相关状态

手动处理

通过抓包工具F12,获取cookie值,将该值手动粘贴到代码中,封装到headers数据中

自动处理

 

cookie值来源于哪里?

模拟登录post请求后,由服务端创建;

session会话的作用

1可以进行请求的发送;

2如果请求过程中产生了cookie,则该cookie会被自动存储/携带在该session对象中

session实例化

创建一个session对象,session=requests.Session()

使用session对象进行模拟登录post请求的发送(服务端生成的cookie就会存储在session中);

session对象对个人主页对应的get请求进行发送(session携带了cookie)

使用

session.post()

session.get()

 

 

 

通过xpath下载简历模板

import os.path

 

#导入包

from lxml import etree

import requests

#定义函数-爬取单个页面

def OnePage( page_number=1):

    #根据页数生成对应的URL

    url=''

    if page_number==1:

        url = 'https://sc.chinaz.com/jianli/free.html'

    elif(page_number in range(2,1192)):

 

        url='https://sc.chinaz.com/jianli/free_'+str(page_number)+'.html'

 

    #UA伪装

    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'}

    #请求整页数据

 

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇科技报告数据语料处理(关键词、.. 下一篇Python绘制饼状图对商品库存进行..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目