-
2022-03-02 15:54:56
Python-常见的反爬虫手段
对于静态页面针对爬虫的手段常常为Headers验证及针对IP的用户行为分析。
一、Headers反爬虫机制
Headers反爬虫机制常常为验证Headers中的信息,常需要验证的信息为UserAgent或X-Token等。针对UserAgent的反爬虫手段,通过导入 fake_useragent 包随机选择UserAgent的方式进行请求。
import requests from fake_useragent import UserAgent base_url = 'http://icanhazip.com' ua = UserAgent() # User-Agent 采用随机选取的方式 headers = { 'X-Token': 'eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MTQ4NDY3MTksImp0aSI6IjVhMmMwYWMyLTAzNTYtNDQ5ZXXXXX' , 'Cookie': 'JSESSIONID=3555BE5F1XXXXXX' , 'User-Agent': ua.random } response = requests.get(base_url, headers=headers)
二、针对IP进行用户行为分析的反爬虫机制
针对单个IP的用户行为分析,需要使用切换不同代理IP间断的拉取数据,从而避免被网站屏蔽。若资源充足,还可以使用分布式爬虫。
import requests """ 1.需要将代理IP加入数组 2.使用 url 验证代理IP是否可用 3.使用代理IP访问需要爬取的网站 """ url = 'http://icanhazip.com' proxies = [ {'http': 'http://107.151.182.247:80'}, {'http': 'http://206.253.164.101:80'} ] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit' '/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' } # proxies = random.choice(proxies) for ips in proxies: try: # 设置重连次数 requests.adapters.DEFAULT_RETRIES = 3 res = requests.get(url, headers=headers, timeout=3, proxies=ips) # 查看是否为代理IP print(res.text) except: print("1代理IP无效!")
后续更新
更多相关内容 -
Python常见反爬虫机制解决方案
2021-01-20 00:01:15对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。 proxies = {'http':'http://XX.XX.XX.XX:XXXX'} Requests: import requests response = requests.get(url=url, proxies=... -
python对于反爬虫机制的处理
2020-12-06 14:37:23使用代理适用情况:大部分网站均限制了IP的访问量对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。#!-*-encoding:utf-8-*-importrequestsimportrandom#要访问的目标页面targetUrl=...使用代理
适用情况:大部分网站均限制了IP的访问量
对于“频繁点击”的情况,我们还可以通过限制爬虫访问网站的频率来避免被网站禁掉。
#! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://httpbin.org/ip" # 要访问的目标HTTPS页面 # targetUrl = "https://httpbin.org/ip" # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理隧道验证信息 proxyUser = "username" proxyPass = "password" proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, "user" : proxyUser, "pass" : proxyPass, } # 设置 http和https访问都是用HTTP代理 proxies = { "http" : proxyMeta, "https" : proxyMeta, } # 设置IP切换头 tunnel = random.randint(1,10000) headers = {"Proxy-Tunnel": str(tunnel)} resp = requests.get(targetUrl, proxies=proxies, headers=headers) print resp.status_code print resp.text
时间设置
适用情况:限制频率情况。大部分网站有频率限制,比如搜索后需要一定间隔才能获取详情页面等。
我们可以用sleep方式来做出以下延迟。
import timetime.sleep(1)
伪装成浏览器,或者反“反盗链”
有些网站会检查你是不是真的浏览器访问,还是机器自动访问的。这种情况,加上User-Agent,表明你是浏览器访问即可。有时还会检查是否带Referer信息还会检查你的Referer是否合法,一般再加上Referer。
User-Agent可以用亿牛云提供给的真实库,Referer的来源可以伪装成百度搜索来的。
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.1276.73 Safari/537.36', 'Referer':'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=nike'}response = requests.get(url=url, headers=headers)
20-06-19 17:38
235
0
-
python爬虫 urllib模块反爬虫机制UA详解
2020-09-18 19:18:26主要介绍了python爬虫 urllib模块反爬虫机制UA详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
Python3爬虫学习之应对网站反爬虫机制的方法分析
2020-12-25 08:53:54本文实例讲述了Python3爬虫学习之应对网站反爬虫机制的方法。分享给大家供大家参考,具体如下: 如何应对网站的反爬虫机制 在访问某些网站的时候,网站通常会用判断访问是否带有头文件来鉴别该访问是否为爬虫,用来... -
python破解网易反爬虫机制
2018-03-12 00:13:53用python3 urllib破解有道翻译反爬虫机制 前言 最近在学习python 爬虫方面的知识,网上有一博客专栏专门写爬虫方面的,看到用urllib请求有道翻译接口获取翻译结果。发现接口变化很大,用md5加了密,于是自己开始...用python3 urllib破解有道翻译反爬虫机制
前言
最近在学习python 爬虫方面的知识,网上有一博客专栏专门写爬虫方面的,看到用urllib请求有道翻译接口获取翻译结果。发现接口变化很大,用md5加了密,于是自己开始破解。加上网上的其他文章找源码方式并不是通用的,所有重新写一篇记录下。
爬取条件
要实现爬取的目标,首先要知道它的地址,请求参数,请求头,响应结果。
进行抓包分析
打开有道翻译的链接:http://fanyi.youdao.com/。然后在按f12 点击Network项。这时候就来到了网络监听窗口,在这个页面中发送的所有网络请求,都会在Network这个地方显示出来,如果是空白的,点击XHR。接着我们在翻译的窗口输入我们需要翻译的文字,比如输入hell。然后点击自动翻译按钮,那么接下来在下面就可以看到浏览器给有道发送的请求,这里截个图看看:
点击链接,就可以看到整个请求的信息。包括请求头,请求参数,响应结果。
这里面有一个问题就是参数进行了加密。我们需要知道这些参数是如何加密的。破解加密难题
要想知道如何加密的,需要查看源码。于是我们需要知道发起这个请求的js文件。在文件查找这个相关代码。刚才我们监听了网络请求,可以看到发起请求的js文件。那么接下来查找发起请求的链路,鼠标浮到请求文件上,显示了一系列执行方法,我们点击跟业务相关的那个方法对应的文件链接,这里是t.translate 对应的连接。
点击进入查看对应的源码
我们可以看到i,salt,sign是变量,其他的请求参数是常量。i是需要翻译的字符串,salt是时间戳生成的13位,sign是S+n+r+D
也就S是client的值,也就是fanyideskweb. 我们查找D 这个常量,在底栏输入框输入 D = (空格D空格=空格;格式化后的代码规范)点击右边的Aa让搜索时大小写敏感。回车查找到下一个,直到找到对应的值。
在上图我们看到了_,C,S,D等常量。
于是你以为构建一个请求,传好这些参数就ok了。别忘了,为了反爬虫,都是会校验请求头。于是要模拟浏览器的请求头。经过验证只需要User-Agent,Referer,Cookie 三个请求头。实现代码:
# -*- coding: utf-8 -*- from urllib import request,parse import json import time from hashlib import md5 ''' def dicToSortedStrParam(dic={}): keyList = sorted(dic) str ="" for i,key in enumerate(keyList): if i==len(keyList)-1: str += key +"="+ dic[key] else: str += key +"="+ dic[key] + "&" pass return str ''' def create_md5(data): md5_obj = md5() md5_obj.update(data.encode("utf-8")) return md5_obj.hexdigest() if __name__ == "__main__": request_url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" translate = "hell" c = "fanyideskweb" data = {} data["i"] = translate data["from"] = "AUTO" data["to"] = "AUTO" data["smartresult"] = "dict" data["client"] = c data["doctype"] = "json" data["version"] = "2.1" data["keyfrom"] = "fanyi.web" data["action"] = "FY_BY_REALTIME" data["typoResult"] = "false" salt = str(int(round(time.time(),3)*1000)) # 加密 data["salt"] = salt # a = "rY0D^0'nM0}g5Mm1z%1G4" 网上别人的 也可以 a = "ebSeFb%=XZ%T[KZ)c(sy!" sign = create_md5(c+translate+salt+a) data["sign"] = sign headers = {} headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" # headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF-8" headers["Referer"] = "http://fanyi.youdao.com/" # headers["Host"] = "fanyi.youdao.com" # headers["Origin"]="http://fanyi.youdao.com" headers["Cookie"]="OUTFOX_SEARCH_USER_ID=-948455480@10.169.0.83; " \ "JSESSIONID=aaajvZPcjhFWbgtIBPuiw; " \ "OUTFOX_SEARCH_USER_ID_NCOO=1148682548.6241577;" \ " fanyi-ad-id=41685; fanyi-ad-closed=1; ___rl__test__cookies="+salt data = parse.urlencode(data).encode('utf-8') request1 = request.Request(request_url,data,headers = headers) response = request.urlopen(request1) print(response.info()) #读取信息并解码 html = response.read().decode('utf-8') print(html) #使用JSON translate_results = json.loads(html) # 找到翻译结果 translate_results = translate_results['translateResult'][0][0]['tgt'] # 打印翻译信息 print("翻译的结果是:%s" % translate_results)
翻译结果:
{"translateResult":[[{"tgt":"地狱","src":"hell"}]],"errorCode":0,"type":"en2zh-CHS","smartResult":{"entries":["","n. 地狱;究竟(作加强语气词);训斥;黑暗势力\r\n","vi. 过放荡生活;飞驰\r\n","int. 该死;见鬼(表示惊奇、烦恼、厌恶、恼怒、失望等)\r\n"],"type":1}} 翻译的结果是:地狱
-
盘点一些网站的反爬虫机制
2020-12-06 14:36:15因为 Python 语法简介以及强大的第三方库,所以我们使用它来制作网络爬虫程序。网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。网络爬虫的难点其实并不...妹子图这个网站的反爬虫机制比较简单。...因为 Python 语法简介以及强大的第三方库,所以我们使用它来制作网络爬虫程序。网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。
网络爬虫的难点其实并不在于爬虫本身。而是网站方为了避免数据被爬取,增加了各种各样的反爬虫措施。如果想要继续从网站爬取数据就必须绕过这些措施。因此,网络爬虫的难点在于反爬的攻克和处理。那么本文主要介绍一些网站的反爬虫措施。
妹子图
这个网站的反爬虫机制比较简单。当我们使用网络请求库下载图片时,该网站会对检查每个 HTTP 请求的 headers 头部中 Referer 字段。它判断该字段是否为空,如果字段为空,那么不会返回正常显示的图片,而是返回一张带有“图片来自妹子网,请勿盗链”字样的图片。
遇到这种机制,突破也是比较简单。对每个 HTTP 请求,将页面的 url 地址填充到 Referer 字段中。
豆瓣
几乎所有的爬虫新手都会爬取豆瓣练练手。但是豆瓣还是保持开放的态度,反爬虫机制做得还是很人性化。它的反爬虫机制大概如下:
1、在没有携带 cookie 的情况下,如果某个 IP 短时间高并发请求网站,该 IP 会立马被封。当 IP 被封,登录豆瓣网站会解封。
3、在携带 cookie 的情况下,某个 IP 请求网站过于频繁。豆瓣的反爬虫机制变为只封 cookie 不封 IP。也就说退出登录或者换个账号还能继续访问网站。
面对这么体谅新手的网站,我们要下手不能那么猛。我们只要在代码中登录账号,同时降低并发数,再随机延迟等待一段时间。我们的爬虫程序就不会被封杀了。
拉勾网
拉勾网站刚出来的时候,反爬虫机制还没有现在这么严格。估计爬取网站的人多了起来,网站管理员为了保护服务器增加一些手段。该网站的反爬虫机制大概是这样子。
1、在没有登录的情况下,程序只能连续访问 3 个 Url。如果再继续访问,网站会将链接重定向,然后提示我们登录。
2、如果在登录情况下,连续请求部分 url 之后,我们的 IP 会被封。
针对这样的爬虫机制,我们只能使用 IP 代理池来突破。
汽车之家
汽车之家论坛的反爬虫机制就比较高级。它利用前端页面自定义字体的方式来实现反爬的技术手段。具体使用到是 CSS3 中的自定义字体(@font-face)模块,自定义字体主要是实现将自定义的 Web 字体嵌入到指定网页中去。这就导致我们去爬取论坛帖子的口碑时,获取到的返回文本中每隔几个字就出现一个乱码符号。
每次访问论坛页面,其中字体是不变的,但字符编码是变化的。因此,我们需要根据每次访问动态解析字体文件。
具体可以先访问需要爬取的页面,获取字体文件的动态访问地址并下载字体,读取 js 渲染后的文本内容,替换其中的自定义字体编码为实际文本编码,就可复原网页为页面所见内容了。
最后说句良心话,我们爬取别人网站的数据,要在不损害别人网站的情况下进行。所以建议大家不要在网站访问高峰的时候爬取数据,尽量选择在晚上进行爬取。同时设置延时操作降低并发数。
推荐阅读:
猴哥:想提高爬虫效率?aiohttp 了解下zhuanlan.zhihu.com
猴哥:爬虫与反爬虫的博弈zhuanlan.zhihu.com
猴哥:多线程爬取 unsplash 图库zhuanlan.zhihu.com
猴哥:爬取《Five Hundred Miles》在网易云音乐的所有评论zhuanlan.zhihu.com
猴哥:学会运用爬虫框架 Scrapy (三)zhuanlan.zhihu.com
猴哥:爬取网易云音乐精彩评论zhuanlan.zhihu.com
猴哥:学会运用爬虫框架 Scrapy (二)-爬取 V电影zhuanlan.zhihu.com
猴哥:我爬取豆瓣影评,告诉你《复仇者联盟3》在讲什么?zhuanlan.zhihu.com
猴哥:爬虫实战一:爬取当当网所有 Python 书籍zhuanlan.zhihu.com
猴哥:“干将莫邪” —— Xpath 与 lxml 库zhuanlan.zhihu.com
猴哥:爬虫实战二:爬取电影天堂的最新电影zhuanlan.zhihu.com
本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享
【极客猴】每周坚持分享 Python 原创干货的公众号。包括基础入门,进阶技巧,网络爬虫,数据分析, Web 应用开发等,欢迎关注。
-
python爬虫进阶,突破反脚本机制(反爬机制)
2022-02-20 15:33:45相信大家在做爬虫或者自动化脚本时或多或少的都能遇到反爬机制(或者说反脚本机制),最常见的反脚本机制都是在登录时进行验证,据本人大量实战(帮粉丝写脚本)发现,基本上只要有点水平的网站都会有反脚本的机制,... -
用sleep间隔进行python反爬虫的实例讲解
2021-01-21 15:14:38我们完全可以用爬虫获取这方面的数据,不过操作过程中会遇到一些阻拦,今天小编就教大家用sleep间隔进行python反爬虫,这样就可以得到我们想到的数据啦。 步骤 要利用headers拉动请求,模拟成浏览器去访问网站,跳过... -
用python3 urllib破解有道翻译反爬虫机制详解
2020-09-18 20:06:50主要介绍了python破解网易反爬虫机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
python爬虫与反爬虫
2021-09-11 19:50:28一、爬虫与反爬虫 1. 爬虫:使用任何技术手段,批量获取网站信息的一种方式。关键在于批量。 2. 反爬虫:使用任何技术手段,阻止别人批量获取自己网站信息的一种方式。关键也在于批 量。 3. 误伤:在反爬虫的... -
详解python 破解网站反爬虫的两种简单方法
2020-12-20 17:27:22最近在学爬虫时发现许多网站都有自己的反爬虫机制,这让我们没法直接对想要的数据进行爬取,于是了解这种反爬虫机制就会帮助我们找到解决方法。 常见的反爬虫机制有判别身份和IP限制两种,下面我们将一一来进行介绍... -
Python反爬机制介绍
2022-02-25 09:14:26一.UA检测与UA伪装 ...则表示该请求不是正常的请求(爬虫),则会拒绝该请求 UA伪装:.让爬虫对应的请求载体身分标识伪装成某一款浏览器 写以下两行代码即可 headers={ 'User-Agent':'Mozilla/5.0 (Windows NT -
可能是最全的 Python 反爬虫及应对方案了
2020-10-29 07:40:12来源:编程派爬虫是 Python 的一个常见应用场景,很多练习项目就是让大家去爬某某网站。爬取网页的时候,你大概率会碰到一些反爬措施。这种情况下,你该如何应对... -
python反爬虫应对措施之搭建代理IP池
2021-07-10 13:22:20既然有IP反爬措施,那就有反反爬对策,我们可以构建一个IP池,针对具有IP反爬措施的网站,每次访问时都随机取出来一个IP,这样就会很大程度上避免被服务器识别出爬虫,大大提高了爬取数据的成功率。 给大家分享两个... -
python selenium 绕过12306反爬虫机制
2022-01-13 16:44:30#打开浏览器 chrome_browser=webdriver.Chrome(chrome_options=option,executable_path='F:\python\chrome驱动\chromedriver.exe') 设置完后 即可成功登录12306 #跳转到12306首页 chrome_browser.get('... -
python中两种反爬机制
2020-05-13 00:19:02request:爬虫中一个基于网络请求的模块 作用:模拟浏览器发起请求 编码流程 (1)指定URL (2)发起请求 (3)获取响应数据 (4) 持久化存储 3、什么是user-agent? 请求载体的身份标识 注:请求载... -
浅谈Scrapy框架普通反爬虫机制的应对策略
2020-09-20 22:43:48主要介绍了浅谈Scrapy框架普通反爬虫机制的应对策略,具有一定借鉴价值,需要的朋友可以参考下 -
反爬虫机制
2022-02-09 20:23:47掌握爬虫遇到的五大类情况,精准对比遇到的反爬机制。 -
python——处理反爬虫机制(隐藏以及代理)
2019-11-13 15:43:46一、一般服务器是通过request header中的user-agent来判断访问的是否为非人类,python给我提供的一个方法用于修改user-agent中的类容来试图欺骗服务器 使用user.request.Request(url,data=None,headers={}) 我们... -
Python-天堂图片网Python3爬虫
2019-08-10 07:39:26天堂图片网Python3爬虫 -
PYTHON3反爬虫(cookie限制)对策问题
2021-02-10 02:37:31■怀疑的反爬虫策略模拟浏览器法头一次程序进去后能打开网站。但是再进时,被检测到使用ROBOTS程序后重定向至下述网址。之后能用Safari,或正常的chrome打开,没有被禁IP。结合网址的描述,怀疑该网站是通过cookie...