爬虫大佬进来,这个没验证码、不限制 ip、不混淆字符的网站能爬出来算我输

2020-03-20 10:01:30 +08:00
 kisshere

https://pixabay.com

这个站本来准备练练手写爬虫,却严重打击了写爬虫的信心,不限制 ip,没 captcha,你即使复制浏览器的所有 headers,服务器还是能直接一个 403 扔过来,但你用正常浏览器:chrome、Firefox 就能正常访问,这个用的什么反爬技术

9939 次点击
所在节点    程序员
81 条回复
kisshere
2020-03-20 10:44:55 +08:00
@b821025551b chrome 首先得到的是 HTML,再去执行 js,network 面板里面,你去复制得到 HTML 那一步(也就是第一步)的 cURL,浏览器能得到正常 HTML,但是 cURL 却 403
vanton
2020-03-20 10:46:27 +08:00
请使用能解析 js 的无头浏览器做爬虫,不能解析 js 的不能算是爬虫。
没有 js 直接 403 又没有什么难度。
b821025551b
2020-03-20 10:48:48 +08:00
@kisshere #21 仔细看 19L 的图,和原站对比一下。先开启 headless 做好代理,cURL 就可用了。
kisshere
2020-03-20 10:48:51 +08:00
@vanton 只是纯技术的好奇,chrome 第一步得到 HTML 的时候,没有执行 js 啊?为啥 chrome 能得到正常的 HTML,而复制出来的 cURL 去执行却返回 403
eluotao
2020-03-20 10:50:00 +08:00
这个网站很好爬啊,直接爬去所有类型 改 id 就可以了
fancy111
2020-03-20 10:58:38 +08:00
太简单,过
InternetExplorer
2020-03-20 11:00:01 +08:00
用这个网站的域名在 GitHub 上搜一下 🤔
azoon
2020-03-20 11:06:18 +08:00
#coding=utf-8
from selenium import webdriver
browser = webdriver.Chrome()
print(type(browser))
browser.get('https://pixabay.com')
eles = browser.find_elements_by_css_selector('div.flex_grid.credits > div > a')

for e in eles:
print(e.get_attribute('href'))
browser.quit()
fenghuang
2020-03-20 11:08:23 +08:00
浏览器能打开,headerless 基本可以,关键是怎么检测的是否是浏览器请求的,请求头和 Chrome 完全一样,直接跳百度云加速,而使用 Chrome 打开就不跳,真的很奇怪
luoleng
2020-03-20 11:10:12 +08:00
cookie.__cfduid???
vanton
2020-03-20 11:11:30 +08:00
@kisshere #24

‘’‘’
curl -svo /dev/null https://pixabay.com
‘’‘’

有 http 执行的路由信息
haha370104
2020-03-20 11:21:21 +08:00
印象中某些时候,chrome 的调试工具并不会显示所有的请求头。

说 js 的先考虑这么一个问题:浏览器的加载顺序是下载 HTML->解析 HTML->下载 HTML 内的所有引用资源、那么请问,在执行第一步的时候,服务器是怎么知道一个浏览器能不能加载 js 的?更加方便的一个反驳方式:请直接进入设置禁用掉 chrome 的 javascript 代码,页面虽然加载略微有点不正常但是不会 403

我们换种方式,先禁用掉 JavaScript (非必要步骤),然后打开 Charles,解析 https 包,然后发现浏览器被 403 了,在通过验证码认证后,cookies 里面多出了一个 key:cf_clearance,curl 的时候加上这个 cookie 就可以正常请求了
a494836960
2020-03-20 11:22:24 +08:00
直接用浏览器插件爬,哈哈
dtsdao
2020-03-20 11:26:50 +08:00
Cloudflare 罢了,Cookie 里加了东西
JamesChan21
2020-03-20 11:31:59 +08:00
好了,是时候收网了。。。
kisshere
2020-03-20 11:32:49 +08:00
@haha370104 但为什么浏览器能无 cookie 访问,cURL 就不行
fenghuang
2020-03-20 11:34:19 +08:00
@haha370104 #32 这就是奇怪的地方,首次访问(无 cookies )非浏览器请求必 403,这个是怎么检测的
fenghuang
2020-03-20 11:40:20 +08:00
@kisshere #36 好像是 不管什么方式访问都是 403 响应体内有 Set-Cookie,然后跳转之后又 cookies 后就可以正常请求了
dtsdao
2020-03-20 11:40:44 +08:00
@kisshere 朋友,你听说过 CF 五秒验证吗?后台可能有机制会自动判断哪些机器过了哪些没过

https://support.cloudflare.com/hc/en-us/articles/200170156-Understanding-the-Cloudflare-Cookies
haha370104
2020-03-20 11:41:29 +08:00
@fenghuang 你即使用浏览器,外面套一层 charles 的代理照样会被检测,我其实还是挺怀疑浏览器的调试工具并没有告诉你全部的请求头或者说做了一些你不知道的事情

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/654469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX