Skip to content

爬虫

>

bugly请求被拒绝

问题现象

公司有需要从bugly上取一些数据。

发现用python请求时:

ts
Traceback (most recent call last):
  File "D:\build2\tools\bugly_warn2.0.0\test.py", line 29, in <module>
    res = session.get(url, headers=headers, params={"fsn": get_fsn()})
  File "C:\Users\zyx\.conda\envs\bugly\lib\site-packages\requests\sessions.py", line 542, in get
    return self.request('GET', url, **kwargs)
  File "C:\Users\zyx\.conda\envs\bugly\lib\site-packages\requests\sessions.py", line 529, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\zyx\.conda\envs\bugly\lib\site-packages\requests\sessions.py", line 645, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\zyx\.conda\envs\bugly\lib\site-packages\requests\adapters.py", line 501, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))

提示_远程主机强迫关闭了一个现有的连接_

但我用浏览器去访问,能正常访问 。很奇怪,bugly服务器是怎么判断我的请求不是浏览器呢,

因为连接还没建立就被断开了,说明不是cookie或者是header的问题。

分析

问题1:tls指纹:

在网上找了一下资料

发现,现在有一个签名的技术可以防爬虫(之前是通过useragent)

现在可以通过 TLS 指纹来识别,参考下面文章链接

文章讲的是用go的库来生成浏览器的指纹。

python的话原生是不支持的,需要用到库,这个文章有介绍curl_cffi

试了一下,换后还是会报错。不过这个点以后有可能会用到。备用。

问题2:ip池

开源项目:

proxy_pool

试用了一下,http代理不少,但https代理基本没有

scylla

没找到免费的

目前我使用vpn做代理

https://zu1k.com/posts/tutorials/http-proxy-ipv6-pool/

使用真正的浏览器

目前有

Selenium

Puppeteer:一个由Google Chrome团队开发的Node库,用于无头浏览器操作。它主要用于自动化Chrome或Chromium浏览器的操作,比如生成页面截图、PDF、自动化表单提交等。Puppeteer通常被认为是对Selenium的一个现代化替代,尤其在操作无头浏览器方面更为高效。

Playwright:由Microsoft开发,支持跨浏览器(Chrome、Firefox、Safari等)自动化的库。Playwright可以被视为Puppeteer的进一步发展,提供了更多的功能和更广的浏览器支持,以及对网络请求的更细致控制。