Python爬虫和反爬虫的斗争!掌握这个10K工作不是问题!

rv1126 读取sensor输入,输出到屏幕显示【RK_MPI API接口】 rv1126 libdrm VO 阅读详情

在抓取对方网站、APP 应用的相关数据时,经常会遇到一系列的方法阻止爬虫。一方面是为了保证服务的质量,另一方面是保护数据不被获取。常见的一些反爬虫 和反反爬虫的手段如下。 

(1)IP 限制 

IP 限制是很常见的一种反爬虫的方式。服务端在一定时间内统计 IP 地址的访问 次数,当次数、频率达到一定阈值时返回错误码或者拒绝服务。这种方式比较直接 简单,但在 IPv4 资源越来越不足的情况下,很多用户共享一个 IP 出口,典型的如“长 城宽带”等共享型的 ISP。另外手机网络中的 IP 地址也是会经常变化的,如果对这 些 IP 地址进行阻断,则会将大量的正常用户阻止在外。 

对于大多数不需要登录就可以进行访问的网站,通常也只能使用 IP 地址进行限 制。比如“Freelancer 网站”,大量的公开数据可以被访问,但同一个 IP 地址的访问 是有一定的限制的。针对 IP 地址限制非常有效的方式是,使用大量的“高匿名”代 理资源。这些代理资源可以对源 IP 地址进行隐藏,从而让对方服务器看起来是多个 IP 地址进行访问。另一种限制方式是,根据业务需要,对国内、国外的 IP 地址进行 单独处理,进而对国外的高匿名代理进行阻断,例如使用海外的 IP 地址访问“天眼 查网站”则无法访问。 

 

(2)验证码 

验证码是一种非常常见的反爬虫方式。服务提供方在 IP 地址访问次数达到一定 数量后,可以返回验证码让用户进行验证。这种限制在不需要登录的网页界面比较 常见,它需要结合用户的 cookie 或者生成一个特殊标识对用户进行唯一性判断,以 防止同一个 IP 地址访问频率过高。验证码的存在形式非常多,有简单的数字验证码、 字母数字验证码、字符图形验证码,网站也可以用极验验证码等基于用户行为的验 证码。针对简单验证码,可以使用打码平台进行破解。这种平台通过脚本上传验证 的图片,由打码公司雇用的人工进行识别。针对极验验证等更复杂的验证码,可以尝试模拟用户的行为绕过去,但通常比较烦琐,难度较大。谷歌所用的验证码更为 复杂,通常是用户端结合云端进行手工打码,但会带来整体成本较高的问题。要想绕过这些验证码的限制,一种思路是在出现验证码之前放弃访问,更换 IP 地址。ADSL 拨号代理提供了这种可能性。ADSL 通过拨号的方式上网,需要输入 ADSL 账号和密码,每次拨号就更换一个 IP 地址。不同地域的 IP 地址分布在多个地 址段,如果 IP 地址都能使用,则意味着 IP 地址量级可达千万。如果我们将 ADSL 主机作为代理,每隔一段时间主机拨号一次(换一个 IP),这样可以有效防止 IP 地 址被封禁。这种情况下,IP 地址的有效时限通常很短,通常在 1 分钟以下。结合大 量的 ADSL 拨号代理可以达到并行获取大量数据的可能。如果网站使用了一些特殊 的唯一性的标识,则很容易被对方网站识别到,从而改进反爬虫策略,面对这种情 况,单独切换 IP 地址也会无效。遇到这种情况,必须要搞清楚标识的生成方式,进 而模拟真实用户的访问。 

(3)登录限制 

登录限制是一种更加有效的保护数据的方式。网站或者 APP 可以展示一些基础的数据,当需要访问比较重要或者更多的数据时则要求用户必须登录。例如,在天 眼查网站中,如果想要查看更多的信息,则必须用账号登录;“知乎”则是必须在登 录后才能看到更多的信息。登录后,结合用户的唯一标识,可以进行计数,当访问 频度、数量达到一定阈值后即可判断为爬虫行为,从而进行拦截。针对“登录限制” 的方法,可以使用大量的账号进行登录,但成本通常比较高。 

针对微信小程序,可以使用 wx.login()方法,这种方式不需要用户的介入,因而 不伤害用户的体验。小程序调用后会获取用户的唯一标识,后端可以根据这个唯一 标识进行反爬虫的判断。 

(4)数据伪装 

在网页上,我们可以监听流量,然后模拟用户的正常请求。mitmproxy 等工具可 以监听特定网址的访问(通常是 API 的地址),然后将需要的数据存储下来。基于 Chrome Headless 的工具也可以监听到流量并进行解析。在这种情况下,某些网站会 对数据进行一些伪装来增加复杂度。例如,在某网站上展示的价格为 945 元,在 DOM 树中是以 CSS 进行了一些伪装。要想得到正确的数值,必须对 CSS 的规则进行一些 计算才行,某网站上展示的价格如图 1-1 所示。 

图 1-1  某网站上展示的价格 

该网站使用特殊的字体对数据进行了伪装。例如,3400,对应显示的是 1400, 如图 1-2 所示。如果能够找到所有的字体对应的关系,则可以逆向出正确的价格。 

某电影网站使用特殊的字符进行数据隐藏,这种不可见的字符会增加复杂度, 但还是可以通过对应的 UTF-8 字符集找到对应关系,从而得到正确的值,如图 1-3 所示。 

图 1-2  3400 显示为 1400 

图 1-3  网站用特殊字符进行伪装 

对于这种伪装,可以人工分析目标网站的前端代码,对 CSS、JavaScript 和字符进行分析,推导出计算公式。在这种情况下,使用爬虫必须要非常小心,因为很可 能目标网站进行改版后,规则已经发生了变化,抓取到的数据便会无效。在爬虫程序的维护上可以增加一些数据有效性的检查,通过自动化或者人工的方式进行检查。例如,针对机票数据可以检查价格是否在一个合理的区间范围内,如果超出,则认为规则已经变化。更为复杂的方案是可以借助 OCR 技术,对所需要的区域进行识别, 然后对比抓取到的结果。 

(5)参数签名 

设计良好的 API 通常都要对参数使用签名(sign)来驱避非法请求,常见于手机 APP。APP 通过加密算法对请求的参数进行运算,从而得到一个签名。这个签名通常 和时间戳相关,并且在请求中附加上时间戳。在请求的参数固定的情况下,能够在一小段时间内生效。当请求发送到服务端后,服务端对参数、时间戳进行验证,比较签名是否一致。如果不一致,则判断为非法请求。这样做的好处是,可以保护请 求,即便是被抓包,在很短时间内这个请求就会失效。获取 APP 端的加密算法一般较为困难,通常需要进行反编译才能获得加密算法。然而现阶段绝大多数 APP 已经 被加壳(典型的如 360 加固、爱加密等),要进行反编译都很困难。另一种保护措施 是,将加密算法放到原生代码中进行编译,通常这些代码是 C 或 C++代码。由于原生代码相对于 Java 代码更难进行逆向工程,所以这给反编译又带来了更多的麻烦。 

针对这种参数签名的方法,没有太好的途径能够来解决,在逆向反编译无果的 情况下,可以试着找寻有没有其他的入口,例如,HTML5、微信小程序等。如果它 们请求了相同的 API,则很有可能在源代码中包含了加密算法。幸运的是,基于 JavaScript 开发的应用非常容易逆向分析,能够很快地获取加密算法,从而绕过 APP 的保护机制。如果这些方法都不奏效,则可以考虑模拟用户操作应用,通过抓包的方式采集到流量中的信息。但这种方式效率较低,如果要发出多个并发的请求,往往需要多个设备同时进行。 

(6)隐藏验证 

更复杂的反爬虫的方式之一是,隐藏验证。例如,在网站的防护上,通过 JavaScript 请求一些特殊的网址,可以得到一些特定的令牌(token),这样每次请求时即可生成

不同的令牌。甚至有些网站会在不可见的图片加上一些特殊的请求参数,从而识别 是否是真正的浏览器用户。这种情况下,想直接获取 API 进行请求通常行不通或者 非常困难,只能通过 Chrome Headless 等工具模拟用户的行为,从而规避这种情况。

(7)阻止调试 

在分析某旅游网站时发现,一旦打开浏览器的控制台界面,就会无限触发浏览器的 debugger 指令。深入研究代码发现,该网站在一个名为 leonid-tq-jq-v3-min.js 中 给所有的构造函数都加上了 debugger 这个关键字,导致任何对象的生成都会触发调试器。这样做的目的是阻止意外的脚本或程序进行跟踪调试,从而保护代码。这种情况下,可以构建一个修改过的 js 文件,去掉 debugger 关键字,使用 mitmproxy 转发流量并拦截 leonid-tq-jq-v3-min.js,将改后的 js 文件返回给浏览器,从而绕过这个限制,某旅游网调试界面如图 1-4 所示。 

图 1-4  某旅游网调试界面 

 

代理服务器 

代理服务器是爬虫工具的基本武器,既可以隐藏真实的访问来源,又可以绕过 大部分网站都会有的 IP 地址的访问频度的限制。常见的代理有 HTTP 代理和 HTTPS 代理两种,根据匿名程度的不同,可以将代理级别分为以下 5 种。 

(1)高匿名代理 

高匿名代理会将数据包原封不动地转发,从服务端来看,就像是真的一个普通客户端在访问,而记录的 IP 地址是代理服务器的 IP 地址,可以对很好地隐藏访问源, 所以这种代理为爬虫工具首选。 

(2)普通匿名代理 

普通匿名代理会在数据包上做一些改动,代理服务器通常会加入的 HTTP 头有 HTTP_VIA 和 HTTP_X_FORWARDED_FOR 两种。根据这些 HTTP 头,服务端可以发现这是一个代理服务器,并且可以追踪到客户端的真实 IP 地址。 

(3)透明代理 

透明代理不仅改动了数据包,还会告诉服务器客户端的真实 IP 地址,因此在抓 取数据时应该避免使用这种代理服务器。 

网上有一些免费代理列表网站会定期扫描互联网,从而获取一些代理服务器的信息,然后将这些信息公布出来。这些代理服务器的有效期可能比较短,也容易被滥用,质量通常较差,所以需要客户端自己筛选出可用的代理。 

在代理的种类上,HTTP 代理多,HTTPS 代理较少。在互联网倡导 HTTPS 的 趋势下,单纯使用 HTTP 代理是无法访问 HTTPS 网址的。大部分往往网站会同时保留 HTTPS 和 HTTP 的访问,所以可以试着将 HTTPS 网址改为 HTTP(协议),一个 原则是,如果网站的 HTTP 可以用,则不要使用 HTTPS。原因是 HTTPS 需要多次握 手,速度比较慢,经过代理之后会显得更慢。HTTP 则会快很多,而且代理服务器可选资源较多,HTTP 代理列表如图 1-5 所示,HTTPS 代理列表如图 1-6 所示。 

图 1-5  HTTP 代理列表 

图 1-6  HTTPS 代理列表 

(4)洋葱代理 

洋葱代理(The Onion Router,TOR)是用于访问匿名网络的软件,可以防止传 输到互联网上的流量被其他人过滤、嗅探或分析。洋葱代理在国内无法使用,如果 需要抓取国外的网站,可以在海外的服务器上搭建洋葱代理,通过它提供的 Socks5 代理端口进行匿名访问。洋葱代理的 IP 地址可以进行受控的切换,从而得到不同的 出口 IP 地址。但遗憾的是,洋葱代理要经过多层的加密和跳转,延迟时间很长,也不稳定,出口的 IP 地址也并不是随机地在全球出口选择,而是固定在一定的区间内, 因而洋葱代理在多并发、高速的场合下并不适用。 

(5)付费代理资源 

如果能够做好代理的质量筛选,那么大部分场景下免费代理资源都是够用的。付费代理资源通常用在需要更为稳定的访问场合或者免费资源不够用的情况下。ADSL 拨号代理可以提供大量的国内 IP 资源,还可以指定省份。ADSL 拨号代理服 务器可以每隔几秒钟就更换IP地址,所以服务器看到的是来自不同的IP地址的访问。由于使用该 IP 地址的时间不长,不大可能被服务器屏蔽,所以通常数据抓取质量比 较稳定,能够持续使用。获得这些代理的方式有以下两种: 

  • 代理列表。服务商会提供一个代理列表访问地址,每次可以提取一定数量 的代理服务器。这些代理服务器通过 ADSL 代理获得,它们通常存活时间 不长,根据服务商的不同,一般存活时间在两三分钟之内。客户端必须不 断地刷新代理服务器列表以取得新的代理列表数据。 
  • 服务提供商会提供一个固定的访问地址和账号,通过访问这个固定的地址, 可以得到不停更换的出口 IP 地址。代理商在服务期内会通过二次代理随机 地将请求分发到不同的代理服务器上。这种方式对于客户端来说访问是透 明的,适用于无法通过编程获得代理服务器列表的应用。 

另外,ADSL 拨号代理也可以自行搭建,方法是购买具有 ADSL 拨号网络的服务器资源,使用脚本定时拨号,等待一段时间后挂断,从而获得不断变化的 IP 地址。

 

构建自己的代理池 

 

网络上存在着大量的代理列表可以免费获取,虽然有效性通常少于 10%,但基

于庞大的数量(通常每日可获得上万个),也会有近千个代理可以用。在 GitHub 上 有很多抓取这类代理的项目,但质量良莠不齐,很难满足需要。经过对比后,我选 择了 ProxyBroker 这个项目。 

ProxyBroker 是一个开源项目,可以从多个源异步查找公共代理并同时检查它们 的有效性。它比较小巧,代码不复杂且易于扩展,不依赖于 Redis 等第三方依赖,非 常专注地做好了抓取代理这件事。 

特点: 

  • 从大约 50 个来源中找到 7000 多个代理工作。
  • 支持协议:HTTP/HTTPS,Socks4/5;还支持 CONNECT 方法的 80 端口和 23 端口(SMTP)。
  • 代理可以按照匿名级别、响应时间、国家和 DNSBL 中的状态进行过滤。
  •  支持充当代理服务器,将传入的请求分发到外部代理,使用自动代理轮换。 检查所有代理是否支持 cookie 和 Referer(如需要,还检查 POST 请求)。 自动删除重复的代理。 异步获取。ProxyBroker 支持命令行操作,可以作为一个单独的工具使用。 

 

(1)查询可用代理 

使用下面的命令可查询到前10个美国的高匿名代理,并且支持HTTP和HTTPS。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
$ proxybroker find --types HTTP HTTPS --lvl High --countries US –strict      -l 10 <Proxy US 0.33s [HTTP: High] 8.9.31.195:8080> <Proxy US 0.71s [HTTP: High] 104.139.71.46:64663> <Proxy US 0.81s [HTTP: High] 47.75.64.102:80> <Proxy US 0.89s [HTTP: High] 50.93.200.237:2018> <Proxy US 0.93s [HTTP: High] 207.246.69.83:8080> <Proxy US 0.28s [HTTP: High] 47.75.48.149:80> <Proxy US 0.28s [HTTP: High] 47.75.39.130:80> <Proxy US 0.30s [HTTP: High] 47.75.97.82:80> <Proxy US 0.60s [HTTPS] 205.202.42.230:8083> <Proxy US 0.40s [HTTP: High] 47.75.126.109:80> 

(2)抓取列表并输出到文件中 

使用下面的命令可查询前 10 个美国的高匿名代理到 proxies.txt 文件中,但是不 执行代理种类和连通性的检查。

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
$ proxybroker grab --countries US --limit 10 --outfile ./proxies.txt $ cat proxies.txt <Proxy US 0.00s [] 75.128.59.155:80> <Proxy US 0.00s [] 8.46.64.42:1080> <Proxy US 0.00s [] 206.71.228.193:8841> <Proxy US 0.00s [] 69.59.84.76:14471> <Proxy US 0.00s [] 98.142.237.108:80> <Proxy US 0.00s [] 104.139.73.239:19330> <Proxy US 0.00s [] 216.54.3.252:27723> <Proxy US 0.00s [] 24.227.184.162:1080> <Proxy US 0.00s [] 8.9.31.195:8080> <Proxy US 0.00s [] 206.189.85.147:1080> 

(3)作为代理服务器使用 

ProxyBroker 可以作为代理服务器使用。在这种模式下可以很方便地进行 IP 地址 的自动切换,对应用程序透明,对于一些既有的应用程序来说,使用代理服务器来 隐藏身份十分方便。 

用法:在一个终端窗口中启动代理服务器。

  •  
  •  
$ proxybroker serve --host 127.0.0.1 --port 8888 --types HTTP HTTPS –lvl      High Server started at http://127.0.0.1:8888

在另一个终端窗口中,使用这个代理地址访问 ifconfig.co,即可得到你的代理服 务器地址,而不是你的 IP 地址。 

当前网络的 IP 地址: 

  •  
  •  
$ curl ifconfig.co 202.56.38.130

使用高匿名代理后的 IP 地址: 

  •  
  •  
$ curl -x http://localhost:8888 ifconfig.co 191.103.88.21 

更多的命令及选项可以通过执行 proxybroker --help 获取。 

(4)扩展 

若命令行提供的功能并不符合我们的需求,可以对其核心进行扩展以满足我们 的需求。下面这个例子来自 ProxyBroker 官方代码,目的是显示找到的代理的详细信息:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
import asyncio from proxybroker import Broker    async def show(proxies):     while True:         proxy = await proxies.get()         if proxy is None: break         print('Found proxy: %s' % proxy)    
proxies = asyncio.Queue() broker = Broker(proxies) tasks = asyncio.gather(     broker.find(types=['HTTP', 'HTTPS'], limit=10),     show(proxies))    
loop = asyncio.get_event_loop() loop.run_until_complete(tasks) $ python3 proxy-broker.py Found proxy: <Proxy HK 0.24s [HTTP: High] 47.90.87.225:88> Found proxy: <Proxy HK 0.24s [HTTP: High] 47.52.231.140:8080> Found proxy: <Proxy HK 0.25s [HTTP: High] 47.89.41.164:80> Found proxy: <Proxy ID 0.32s [HTTP: Transparent] 222.124.145.94:8080> Found proxy: <Proxy US 0.40s [HTTP: Transparent] 47.254.22.115:8080> Found proxy: <Proxy US 0.37s [HTTP: High] 40.78.60.44:8080> Found proxy: <Proxy ID 0.37s [HTTP: High] 103.240.109.171:53281> Found proxy: <Proxy MX 0.38s [HTTP: High] 201.167.56.18:53281> Found proxy: <Proxy EC 0.51s [HTTP: High] 190.214.0.154:53281> Found proxy: <Proxy RU 0.54s [HTTP: High] 46.173.191.51:53281> 

更多的例子可以参考 ProxyBroker 官方文档。 

(5)构建自己的代理列表池 

我们想构造一个代理池,它仅包含一系列不断刷新的高匿名代理,以方便客户端的使用。这个代理池仅仅提供代理服务器的地址,并不需要处理额外的事情,客 户端拿到这些代理服务器地址后,需要对这个列表按照自己的需求进行处理。例如, 对代理进行筛选,对代理服务器的有效性进行评估,对代理服务器进行质量排序, 定时刷新代理列表,等等。 

某些代理池软件设计得较为复杂,将代理的筛选、评价逻辑放到了代理池内部 进行处理,暴露给客户端的好像是使用一个代理地址,虽然这在一定程度上简化了 客户端的逻辑,但由于各个客户端对代理的使用不尽相同,因此往往限制了客户端 以佳的方式来使用代理列表。 

当然,简化的代理池也存在一些优点和弊端: 

  • 客户端可能有重复的逻辑,但这种逻辑可以通过代码共享、包共享等方式 消除。
  • 有些客户端无法修改源代码,无法植入代理使用的逻辑。 

在设计上,通过爬虫的方式获取的代理失效得都比较快,因此我们可以将 ProxyBroker 获取的代理服务器地址源源不断地放到 Redis 缓存中,以提供一个含有大量代理地址的列表。首先,对于每个代理,我们需要设置一天的有效期(或者更短),以便能够自动清除过期的代理。其次,我们需要提供一个简单的 HTTP 代理服务器,以便能够为应用程序提供一个代理服务器列表的访问入口。 

通过 ProxyBroker 获取代理: 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#Proxy-pool-gather.py import asyncio    import datetime import logging    from proxybroker import Broker import redis
r = redis.Redis(host='localhost', encoding="UTF-8", decode_responses=True)    expire_time_s = 60 * 60 * 24    #一天后过期 async def save(proxies):     while True:         proxy = await proxies.get()         if proxy is None:                 break         if "HTTP" not in proxy.types:                 continue         if "High" == proxy.types["HTTP"]:                 print(proxy)                 row = '%s://%s:%d' % ("http", proxy.host, proxy.port)             r.set(row, 0, ex=expire_time_s)    
while True:         proxies = asyncio.Queue()         broker = Broker(proxies, timeout=2, max_tries=2, grab_timeout=3600)         tasks = asyncio.gather(broker.find(types=['HTTP', 'HTTPS']),save(proxies))         loop = asyncio.get_event_loop()         loop.run_until_complete(tasks) 

HTTP 服务器展示代理列表: 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#Proxy-http-server.py from flask import Flask from flask_restful import Resource, Api import redis    app = Flask(__name__) api = Api(app)    r = redis.Redis(host='localhost', encoding="UTF-8",  decode_responses=True)    class Proxy(Resource):         def get(self):                return r.keys("*")
api.add_resource(Proxy, '/proxy.json')
if __name__ == '__main__':     app.run(host="0.0.0.0", port=8000)

在一个终端中运行python3 proxy-pool-gather.py后可以看到代理已经开始抓取工 作。在另一个终端中运行 python3 proxy-http-server.py,访问 http://localhost:8000/proxy.json 会返回代理列表,如图 1-7 所示。 

图 1-7  代理列表 

这时就已经建立好一个代理池供爬虫工具使用。 

(6)增加国内的代理网站 

ProxyBroker 提供的代理网站,大多数来自国外的代理列表;在国内,有些网站 因被屏蔽而获取不到代理资源。针对这种情况,可以把 ProxyBroker 部署到国外的服 务器上以便于寻找代理资源。 

增加代理列表网站的解析相对比较容易,在 providers.py 文件中提供了所有的代 理列表网站的解析方法。以快代理为例,增加它的解析非常方便,只需增加一个类, 并且在 PROVIDERS 变量中注册这个类的实例即可: 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
class Kuaidaili(Provider):     domain = "kuaidaili.com"        async def _pipe(self):         urls = ["http://www.kuaidaili.com/free/inha/%d" % n for n in  range(1, 21)]         urls += ["http://www.kuaidaili.com/free/outha/%d" % n for n in  range(1, 21)]         await self._find_on_pages(urls)    PROVIDERS = [ ......          Kuaidaili(), ] 

添加了国内的代理后,再将代理服务器部署到国外的服务器上,一般能够获取 大约一万条的代理资源信息。 

 

PCL RANSAC采样一致性算法 一直想了解一下RANSAC算法的一些原理,所以就趁着自己闲了下来整理了一下,做了这篇笔记。 文章目录一、简介二、PCL中的RANSAC 一、简介 RANSAC是一种随机参数估计算法。RANSAC从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与偏差比较,当偏差小于阈值时,该样本点属于模型内样本点(内点),否则就是外样本点(外点)。记录当前的内点的个数,然后重复上述的过程,直到模型中的内点达到最多,那么此时的模型参数即为最 阅读详情

相关推荐

mcgs数据查表功能,用于大量数据对比查找对应数据,减少PLC代码

mcgs脚本实现数据查表功能

qq_24866535的博客 3271

Python爬虫和反爬虫的斗争

我们常接触的网络爬虫是百度、搜搜、谷歌(Google)等公司的搜索引擎,这 些搜索引擎通过互联网上的入口获取网页,实时存储并更新索引。搜索引擎的基础 就是网络爬虫,这些网...

Python大本营的博客 1万+

MQTT(轻量级消息中间件)基本使用指南

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的发布 / 订阅模式(Pub/Sub)消息传输协议,专为低带宽、不稳定网络环境设计,广泛应用于物联网(IoT)、移动设备、传感器网络等场景(如空气净化器、智能家居设备的远程控制)。Eclipse Mosquitto 是一款轻量级、开源的 MQTT 消息服务器(Broker),由 Eclipse 基金会维护,专为低资源消耗和易用性设计。

墨鸦的博客 1万+

爬网站时禁止调试模式(F12)处理方法

在爬取一些网页的时候F12快捷键不能使用,不能打开调试界面 解决办法:以谷歌浏览器为例,左上角选项—更多工具–开发者工具 或者使用ctrl+shift+I快捷键打开 但是打开调试界面后,网页界面卡住了,调试界面sources中不停的循环一个debugger函数这是因为网页添加的js代码进行了过禁用调试设置,不停的循环这个debugger函数,几次之后就会内存增长造成网页卡顿 解决办法: 一、禁用调试模式 这样可以正常显示,但是我们不能正常调试其他代码了 二、在循环提示debugger的地方,在3的地方

凉云半的博客 2万+

深入解析国家企业征信系统瑞数6vmp算法逆向实战

本文深入解析了国家企业征信系统所采用的双层防护机制,重点聚焦于瑞数6代vmp算法的逆向实战。文章详细拆解了从加速乐521状态码的绕过,到瑞数412挑战的核心算法还原过程,提供了通过动态Hook、日志分析进行算法逆向,并用Python实现自动化请求链的完整技术方案,旨在为安全研究与技术学习提供参考。

yellow的专栏 613

从零构建智慧农业监测终端:STM32数据采集与LoRa组网实战

本文详细介绍了如何从零构建智慧农业监测终端,涵盖STM32数据采集与LoRa组网实战。通过DHT22温湿度传感器和YL-69土壤湿度传感器实现精准环境监测,结合LoRa无线传输技术解决偏远农田信号问题。文章还分享了硬件选型、电路设计、低功耗优化及Flutter跨平台应用开发等关键技巧,助力农业智能化升级。

weixin_29172963的博客 357

爬虫工具篇-ProxyBroker-代理IP管理

ProxyBroker是一个Python库,用于自动获取代理IP地址,实现爬虫的IP地址轮换和防封禁。它可以从多个代理IP来源获取代理IP地址,同时支持自定义代理IP来源。ProxyBroker支持多线程和异步处理,可用于高并发的爬虫场景。

zxlwxhn的博客 7万+

34、高效探索柔性蛋白质环构象空间的算法

本文介绍了一种高效探索柔性蛋白质环构象空间的算法,通过种子采样和变形采样两种技术,同时满足运动学闭合和避免空间位阻冲突的约束条件。种子采样能够在闭合无冲突构象空间中广泛生成构象,而变形采样则可以对“有趣”区域进行更密集的探索。实验结果表明,这两种方法在不同大小和受限程度的蛋白质环上均表现出色,运行时间在可接受范围内。相关算法已集成到工具包LoopTK中,可在https://simtk.org/home/looptk获取。

moon9的博客 128

python爬虫获取大量免费有效代理ip--有效防止ip被封

以后再也不用担心写爬虫ip被封,不用担心没钱买代理ip的烦恼了 在使用python写爬虫时候,你会遇到所要爬取的网站有反爬取技术比如用同一个IP反复爬取同一个网页,很可能会被封。如何有效的解决这个问题呢?我们可以使用代理ip,来设置代理ip池。 现在教大家一个可获取大量免费有效快速的代理ip方法,我们访问西刺免费代理ip网址 这里面提供了许多代理ip,但是我们尝试过后会发现并不是每一个都是有效的。...

A_彬的博客 6656

5G射频设计中N77&N79的PRX为什么需要3个SRS

首先,我们来逐个拆解一下这个神秘的“

weixin_43199439的博客 1325

微信小程序 - 详细解决web-view公众号文章或第三方网站分享转发后打开失败,页面显示“无法打开该页面,不支持打开“、“页面不存在“报错提示,苹果IOS系统手机打开是空白页,安卓手机系统会有提示!

微信小程序,公众号文章,第三方H5网页,内嵌网站分享后打不开,web-view,页面分享,小程序里公众号文章转发后无法打开,白屏,页面空白什么都没有,不支持打开,无法打开该页面,页面不存在,业务域名配置好了还是不行,公众号和小程序已经关联,iOS端苹果真机打开空白页,安卓手机,页面分享后,用户打不开提示错误,提示页面不存在,如何解决页面提示无法打开该页面,微信小程序web-view无法打开该页面不支持打开的解决方法,无法打开该页面不支持打开,最新详细解决方案,分享之后无法打开页面,提示无法打开该页面,不支持

🏆 前端领域优质创作者 1万+

python Proxybroker查找可用代理

在上述示例中,首先导入 ProxyBroker 库并创建一个 ProxyBroker 对象。然后,通过调用 get_proxy() 方法获取一个可用的代理服务器。最后,使用代理服务器进行 HTTP 请求。请注意, ProxyBroker 库的具体用法可能会因版本和配置而有所不同。你还可以查阅 ProxyBroker 的文档以获取更详细的信息和示例。ProxyBroker 是一个用于管理和旋转代理服务器的 Python 库。它提供了一种方便的方式来获取、验证和使用代理服务器。

canduecho的专栏 446

ISO2626 --- Item Definition相关项定义

本文并不是针对ISO26262的一个项目,而是针对ISO26262的规范,我们在相关项定义阶段,我们需要做什么,我们的文档需要包含哪些内容的一个描述。

wj博客 909

python3爬虫(7)反反爬虫解决方案

本文转载自:https://github.com/luyishisi/Anti-Anti-Spider 越来越多的网站具有反爬虫特性,有的用图片隐藏关键数据,有的使用反人类的验证码,建立反反爬虫的代码仓库,通过与不同特性的网站做斗争(无恶意)提高技术。(欢迎提交难以采集的网站)(因工作原因,项目暂停)https://www.urlteam.org 特别说明:这个项目最初源于对自己爬虫代码...

liujiayu2的专栏 3807

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

proxybroker中使用遇见的坑=-=

关于python代理工具proxybroker遇到的大坑 背景 作为一个前端,很多朋友就要发问了,为什么搞python代理,这个是因为公司有一个代理的需求,经过多方面筛选,我选定了代理工具proxybroker,然后对于我这个后端小白来说,就遇到了史诗级大坑。。。。 过程 安装python的话就没必要赘述,网上教程一抓一大把,由于proxybroker使用的是python3.5以上的版本,因此我装了python3最新的版本3.10,安装过程都很顺利,但是执行的时候遇到了一个报错,如下图: 本来以为是安装错

Cmomoa的博客 1056

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

老卫带你学---python反爬虫与反反爬虫

老卫带你学—python反爬虫与反反爬虫 在抓取对方网站、APP 应用的相关数据时,经常会遇到一系列的方法阻止爬虫。一方面是为了保证服务的质量,另一方面是保护数据不被获取。常见的一些反爬虫 和反反爬虫的手段如下。 (1)IP 限制 IP 限制是很常见的一种反爬虫的方式。服务端在一定时间内统计 IP 地址的访问 次数,当次数、频率达到一定阈值时返回错误码或者拒绝服务。这种方式比较直接 简单,但在 IPv4 资源越来越不足的情况下,很多用户共享一个 IP 出口,典型的如“长 城宽带”等共享型的 ISP。另外手机

老卫带你学 3134

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【ProxyBroker】用Python打破网络限制的利器

ProxyBroker是一个开源工具,它可以异步地从多个来源找到公共代理,并同时对它们进行检查。在当今互联网世界中,隐私保护和访问限制已经成为了许多人关注的焦点。ProxyBroker的出现为用户提供了一个强大的工具,可以帮助用户访问受限网站、保护个人隐私,以及实现访问真实地理位置所限制的资源。ProxyBroker的出现为用户提供了一个强大的工具,帮助用户突破网络限制,保护个人隐私,以及实现更多可能性。它的开源免费、多源代理、异步处理等优势使得它成为了网络代理工具中的一匹黑马,吸引了众多用户的关注和青睐。

Creedassin的博客 796

计算机网络原理 课后题7

第一章: 第二章: 第三章: 第四章: 第五章: 第六章: 第七章: 第八章: 第七章 无线与移动网络 1.简述CSMA/CA基本工作原理。 P253 2.移动网络的间接路由选择的基本工作原理是什么? P247 (1)间接路由选择:由归属代理转发数据给外部代理。使用隧道技术。 (2)直接路由选择:由通信代理通过归属代理获得转交地址,直接发送到外部代理。 3.为什么在无限局域网中不使用CSMA/CD 协议而使用CSMA/CA协议? P...

Le vent se lève, il faut tenter de vivre 9489

常见的IP代理网站收集

收集的网站代理IP仅用于学习和测试,严禁用于非法用途,因非法使用导致的法律责任由用户承担。

m0_69254007的博客 2868

爬虫入门task3:代理ip、selenium、session、cookies

一、代理ip 为什么会出现IP被封 网站为了防止被爬取,会有反爬机制,对于同一个IP地址的大量同类型的访问,会封锁IP,过一段时间后,才能继续访问 如何应对IP被封的问题 有几种套路: 修改请求头,模拟浏览器(而不是代码去直接访问)去访问 采用代理IP并轮换 设置访问时间间隔 如何获取代理IP地址 从该网站获取: https://www.xicidaili.com/ inspect -&gt...

胖虎卖汤圆的博客 2万+

如何检查设置的IP是否有效?Storm proxies动态代理IP好用吗?

需要注意的是,IP的有效性可能随时发生变化,一些代理IP可能在使用一段时间后被封禁或者失效,因此在使用代理IP时需要定期检查其有效性,并根据需要进行更新或替换。服务的公司,其主营业务是提供高质量的私人代理服务,包括独享代理和共享代理。总的来说,Storm Proxies是一家值得信赖的代理服务提供商,其提供的代理服务质量和稳定性较高,可以满足用户的多种需求。在市场上拥有一定的声誉和用户基础,其代理服务的质量和稳定性较高,而且提供了较为灵活的代理套餐,用户可以根据自己的需要来选择合适的代理服务。

stormeee的博客 630

【Python爬虫】:使用高性能爬虫快速检验证代理IP是否有效

在进行爬虫的过程当中,我们经常会遇到被封IP的情况,因此我们可以搜集一些代理IP,然后使用程序去测试哪些代理IP是可用的,我在这里使用了请求如下网站的方法: http://icanhazip.com/ 请求这个网站之后,如果请求成功,没有遇到异常,就会返回当前你请求这个网站的IP地址。同时保存到一个txt文件当中,进行数据的持久化,这样我们下次需要这些代理IP的之后,也可以随手使用。...

极歌科技 1132

学Python爬虫要先了解网页防爬虫措施!

在 Python 中实现网页防爬虫措施,实际上更多是从服务端的角度去考虑的,因为爬虫主要是由客户端(如 Python 脚本)发起的。但是,了解并实现一些常见的防爬虫技术可以帮助你设计更加健壮的网站服务。

2401_86760453的博客 1035

数据中心解决方案安全技术

技术特色 在这种咄咄逼人的安全形势下,数据中心需要一个全方位一体化的安全部署方式。H3C数据中心安全解决方案秉承了H3C一贯倡导的“安全渗透理念”,将安全部署渗透到整个数据中心的设计、部署、运维中,为数据中心搭建起一个立体的、无缝的安全平台,真正做到了使安全贯穿数据链路层到网络应用层的目标,使安全保护无处不在。 H3C数据中心安全解决方案的技术特色可用十二个字概括:三重保护、多层防御;分区规划

permike的专栏 3万+

ProxyBroker 使用教程

ProxyBroker 是一个开源工具,用于异步地从多个来源查找公共代理并同时检查它们。它支持 HTTP(S) 和 SOCKS4/5 协议,并可以作为代理服务器运行,将传入请求分发到外部代理,并自动轮换代理。ProxyBroker 能够从大约 50 个来源找到超过 7000 个工作代理,并支持根据类型、匿名级别、响应时间、国家以及 DNSBL 状态过滤代理。 ## 项目快速启动 ### 安装 ...

gitblog_00430的博客 736

python利用proxybroker构建爬虫免费IP代理池!不用担心被封了!

大纲 前言 ProxyBroker简介 ProxyBroker安装 在终端使用ProxyBroker 在代码中使用ProxyBroker 总结 前言 写爬虫的小伙伴可能遇到过这种情况: 正当悠闲地喝着咖啡,满意地看着屏幕上的那一行行如流水般被爬下来的数据时,突然一个Error弹出,提示抓不到数据了... 然后你反复检查,确信自己代码莫得问题之后,发现居然连浏览器也无法正常访问网页了... 难道是网站被我爬瘫痪了? 然后你用手机浏览所爬网站,惊奇地发现居然能访问! 才原来我的IP被

爬遍所有网站 2207
上一篇: Python爬虫入门并不难,甚至进阶也很简单!看完这篇文章就会了!
下一篇: Python爬虫:抓取手机APP的数据!谁说不能爬取app数据的?
PythonJavaPHP
博客等级 码龄7年 116粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值