Python 爬虫浏览器伪装技术

news/2024/7/19 12:25:19 标签: python, 爬虫, 开发语言

1 网站常见的反爬虫和应对方法

一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式。

前两种比较容易遇到,大多数网站都从这些角度来反爬虫。第三种一些应用ajax的网站会采用,这样增大了爬取的难度。

① 通过Headers反爬虫
从用户请求的Headers反爬虫是最常见的反爬虫策略。

很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。

对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。

② 基于用户行为反爬虫
还有一部分网站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。

大多数网站都是前一种情况,对于这种情况,使用IP代理就可以解决。

对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。

有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。

③ 动态页面的反爬虫
大多网站界面都是静态页面(即在浏览器中查看源代码可见),但是还有一部分网站中的数据是后期通过ajax请求(或其他方式如推送技术)得到。

解决办法:首先用Firebug或者Fiddler对网络请求进行分析。找到ajax的请求url,通过Python模拟请求得到需要的数据。

但是还有些网站把ajax请求的所有参数全部加密了,针对于这方式我们后面会给大家讲解动态渲染页面信息爬取。

2 请求头Headers介绍

1)请求(客户端->服务端[request])

python">GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
Accept: */*(客户端能接收的资源类型)
Accept-Language: en-us(客户端接收的语言类型)
Connection: Keep-Alive(维护客户端和服务端的连接关系)
Host: localhost:8080(连接的目标主机和端口号)
Referer: http://localhost/links.asp(告诉服务器我来自于哪里)
User-Agent: Mozilla/4.0(客户端版本号的名字)
Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
Cookie(客户端暂存服务端的信息)
Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)

2)响应(服务端->客户端[response])

python">HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
Server:apache tomcat(服务端的Web服务端名)
Content-Encoding: gzip(服务端能够发送压缩编码类型)
Content-Length: 80(服务端发送的压缩数据的长度)
Content-Language: zh-cn(服务端发送的语言类型)
Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
Transfer-Encoding: chunked(分块传递数据到客户端)
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
Expires: -1//3(服务端禁止客户端缓存页面数据)
Cache-Control: no-cache(服务端禁止客户端缓存页面数据)
Pragma: no-cache(服务端禁止客户端缓存页面数据)
Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)

Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)

3 在requests中设置请求头Headers
import requests

代理IP地址

proxy = {‘HTTP’:‘117.85.105.170:808’,‘HTTPS’:‘117.85.105.170:808’}

header头信息

python">headers = {
    'Host': 'blog.csdn.net',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate',
    'Referer': 'http://www.baidu.com',
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
}

请求url地址

python">url = "http://blog.csdn.net"

提交请求爬取信息

python">response = requests.get(url,headers=headers,proxies=proxy)

获取响应码

python">print(response.status_code)

浏览器用户代理池信息

python">user_agents = [
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7',
    'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0',
]
import random
agent = random.choice(user_agents) # 随机获取一个浏览器用户信息

http://www.niftyadmin.cn/n/266099.html

相关文章

前端异步编程全套:xmlhttprequest > ajax > promise > async/await

异步编程 同步与异步区别 同步:按顺序,依次执行,向服务器发送请求-->客户端做其他操作 异步:分别执行,向服务器发送请求>同时执行其他操作 原生xmlhttprequest 四步骤 创建ajax对象 var anew xmlhttprequest(…

几何算法——7.Blending(倒角)的调研、设计及算法

几何算法——7.Blending(倒角)的调研、设计及算法 1 Parasolid的Blending1.1 关于Parasolid的BlendSurface1.2 Edge Blending1.2.1 Rolling-ball blends1.2.2 Variable rolling-ball blends1.2.3 Chamfers1.2.3.1 face offset chamfers1.2.3.2 apex-rang…

R语言实现GWAS结果显著SNP位点归类提取与变异类型转化

GWAS结果显著SNP位点归类提取与变异类型转化 根据GWAS得到的Rresult文件信息,能够找出每个snp位点对应的显著性情况和基因变异信息,接下来,需要根据表格中的信息进行归纳总结,对不同显著性层次进行区分,找出可能性最大…

Java笔记_12(集合进阶)

Java笔记_12 一、集合的体系结构二、Collection2.1、迭代器遍历2.2、增强for遍历2.3、Lambda表达式遍历 三、list集合3.1、List集合的特有方法3.2、 List集合的遍历方式 四、数据结构4.1、数据结构概述4.2、栈4.3、队列4.4、数组4.5、链表4.6、树二叉查找树平衡二叉树 4.7、红黑…

MySQL游标(cursor)定义及使用

提到MySQL游标,多半在存储过程中定义及使用。 以下说明摘自MySQL官网: MySQL 支持存储程序中的游标。语法与嵌入式 SQL 中的一样。游标具有以下属性: 不敏感:服务器可能会也可能不会复制其结果表只读:不可更新不可滚动…

【Java】-【XSSFWorkBook解析.xlsx的excel】

在POI中提供了Excel文件的两种实现类,HSSFWrorBook和XSSFWorkBook,前者适用于Excel文件的老版本,后缀名为“.xls”,而后者适用于后缀名为“.xlsx”。 解析excel 创建WookBook类的实例化对象 创建一个WookBook类的实例化对象,与…

Vue+Openlayers+proj4实现坐标系转换

场景 Vue中使用Openlayers加载Geoserver发布的TileWMS: Vue中使用Openlayers加载Geoserver发布的TileWMS_霸道流氓气质的博客-CSDN博客 在上面的基础上实现不同坐标系坐标数据的转换。 Openlayers中默认的坐标系是EPSG:900913 EPSG:900913等效于EPSG:3857 可在…

Java关键字之:this

一、this关键字的使用 1、this可以用来修饰、调用:属性、方法、构造器 2、this修饰属性和方法 this理解为:当前对象 或 当前正在创建的对象 在类的方法中。我们可以使用“this.属性"或”this.方法“的方式。调用当前对象属性或者方法。但是&#…