请教一个爬虫问题

2016-07-04 16:37:34 +08:00
 strahe

想要抓取一个网站的数据,但是网站好像做了防爬虫处理,有什么方法可以绕过这个,爬到数据.

网址:https://www.bw.com

谢谢.

4361 次点击
所在节点    Python
31 条回复
aeshfawre
2016-07-04 19:27:15 +08:00
你们这群人啊,根本就没去试,这网站是很特殊,发送的 header 完全一样却得不到一样的结果.
作为一个爬虫老司机,对这网站表示值得深入研究.
以前遇到过类似一样的站点,https 访问的时候连接的加密设置不同引起的
aeshfawre
2016-07-04 19:31:03 +08:00
我可以肯定不是因为 cookie 引起的,用 burpsuite 重复发送是可以的,但是用 python 就不行,这与我以前遇到的站点类似.
当然这站点 cookie 会过期,这不是重点.
binux
2016-07-04 19:50:06 +08:00
@aeshfawre 什么很特殊,值得深入研究啊,就是个加速乐的 CDN 而已。
写一个 cookie , js 再算另一个,有时间限制,和 IP 环境绑定。 HTTP 协议就那么点东西,和你用什么发请求一点关系都没有。
怕麻烦就复制 cookie ,不怕麻烦就上 js 引擎。
strahe
2016-07-04 20:08:42 +08:00
@aeshfawre 老司机研究一下,有结果了告知一下啊
aeshfawre
2016-07-05 00:55:15 +08:00
好吧,我错了,其实这也一样只是 cookie 的问题.作为老司机,我必须再练下手,下面是解决的步骤:

准备工作:ubuntu 系统
1:首先安装 phantomjs ubuntu 系统下 最新版 http://phantomjs.org/download.html
cd /usr/local/share/
sudo wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
sudo tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
sudo ln -s /usr/local/share/phantomjs-2.1.1-linux-x86_64 /usr/local/share/phantomjs
sudo ln -s /usr/local/share/phantomjs/bin/phantomjs /usr/local/bin/phantomjs
which phantomjs

2:获取要被执行的 js, 创建一个 python 文件如下内容:
import requests
import commands
html=requests.get('https://www.bw.com/pool/btcIndexChartsData?type=2')
cookie1=html.cookies['__jsluid'] #第一个 cookie
js = html.text.replace("<script>", '')
js = js.replace("</script>", '')
js = js.replace("eval", 'console.log')
js = js+'phantom.exit()'
f = open('getcookie.js', "w+")
f.write(js)
f.close()
status, output = commands.getstatusoutput('phantomjs getcookie.js') #第一次解析获得用来生成 cookie 的 js 代码
idx=output.find('{};')
output2=output[idx+3:] #去除头部
idx=output2.find('setTimeout')
output2=output2[0:idx] #去除尾部
output2=output2+'console.log(dc);phantom.exit();'
f = open('getcookie.js', "w+")
f.write(output2)
f.close()
status, cookie2 = commands.getstatusoutput('phantomjs getcookie.js') #第二次执行 js 代码获得 cookie
cookie2=cookie2.replace('__jsl_clearance=','')
#用 cookie1 和 cookie2 去获取真正的数据

cookie = {'__jsluid':cookie1 , '__jsl_clearance':cookie2}
html=requests.get('https://www.bw.com/pool/btcIndexChartsData?type=2',cookies=cookie)
print html.text
543400
2016-07-05 09:32:35 +08:00
这头像好像我老师 你是珠海的?
strahe
2016-07-05 09:38:40 +08:00
@543400 一个头像也可以? 杭州
strahe
2016-07-05 09:40:08 +08:00
@aeshfawre 直接从它返回的 js 中找不出来 cookie 吗?必须要用 phantomjs?
aeshfawre
2016-07-05 09:59:45 +08:00
@strahe 可以啊,你将这段 js 看懂,然后用自己的语言编写出同样功能的代码来.
zqhong
2016-07-05 14:29:54 +08:00
@aeshfawre 里面有一段 js 代码,恶心到我了。。怪不得我直接用 Selenium+PhantomJS 好像被卡住了一样。。。

while (window._phantom || window.__phantomas) {
};
aeshfawre
2016-07-05 15:01:48 +08:00
@zqhong 嗯, 解决这个站点不想利用 js 引擎,那就必须将这 js 翻译出来,写出同样功能的代码 , 难度有点高.

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

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

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

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

© 2021 V2EX