请教一个爬虫问题

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

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

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

谢谢.

4398 次点击
所在节点    Python
31 条回复
b821025551b
2016-07-04 16:49:26 +08:00
貌似识别 js 引擎吧,在浏览器里写 js 。。。
mutoulbj
2016-07-04 17:13:46 +08:00
需要爬哪些个数据有防爬?
比如算力页面:数据在 https://www.bw.com/pool/btcIndexChartsData?type=2https://www.bw.com/pool/ajaxBlocks?coint=btc 两个请求下就可得到。


没说要什么数据如何分析?
strahe
2016-07-04 17:18:44 +08:00
@mutoulbj 我只是举个例子,就比如说 https://www.bw.com/pool/btcIndexChartsData?type=2 这个链接,如何抓取?
mutoulbj
2016-07-04 17:25:37 +08:00
@strahe 这请求一次不就得到数据了么?你说的怎么抓取是什么意思?
chendajun
2016-07-04 17:26:57 +08:00
@strahe requests 拿到源码,再通过 json 或正则提取需要的元素即可
b821025551b
2016-07-04 17:31:31 +08:00
@mutoulbj
@chendajun

你们回答问题之前先用 curl 看看能不能正确取到数据好么。
strahe
2016-07-04 17:31:38 +08:00
@mutoulbj
@chendajun 你俩实际请求过吗? 别用浏览器打开
b821025551b
2016-07-04 17:40:43 +08:00
貌似 python 有模拟 js 引擎的库,简单的搜一下,比如这个: Spidermonkey
http://www.newsmth.net/nForum/#!article/Python/57476
另外如果找到好的解决方案请楼主回复一下 :D
binux
2016-07-04 17:53:17 +08:00
@strahe
你浏览器访问一次拿到 cookie ,再用 cookie 爬不就好了。你会什么就用什么搞呗。
strahe
2016-07-04 17:56:55 +08:00
@binux 把包括 cookie 在内的 header 全部拷贝近程序也不行
binux
2016-07-04 17:57:41 +08:00
@strahe ip 相同吗?
strahe
2016-07-04 17:57:45 +08:00
@b821025551b 我试下,今天试了几个都不好使.
SpicyCat
2016-07-04 18:06:05 +08:00
yanyuan2046
2016-07-04 18:07:39 +08:00
最简单的办法
1 、打开 chrome 开发者工具
2 、请求 https://www.bw.com/pool/btcIndexChartsData?type=2
3 、把抓到的 http header 全部添加到你的 python 爬虫中
4 、你的爬虫跟浏览器就是一模一样了
5 、如果 header 是动态的(不同请求,某个 http header 的值在变化,就分析这个值是怎么来的)
csdreamdong
2016-07-04 18:13:14 +08:00
@yanyuan2046 同意。
csdreamdong
2016-07-04 18:15:33 +08:00
curl 'https://www.bw.com/pool/btcIndexChartsData?type=2' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch, br' -H 'Accept-Language: zh-CN,zh;q=0.8' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: no-cache' -H 'Cookie: __jsluid=5431640c14c76916ab42ab965018aedd; __jsl_clearance=1467627242.423|0|a%2FIkug0lf8VyLrxcW4zgJNNtttE%3D; Hm_lvt_bb4a4d5e0b7e0cdff02975c9129fc66c=1467627246; Hm_lpvt_bb4a4d5e0b7e0cdff02975c9129fc66c=1467627246' -H 'Connection: keep-alive' --compressed
strahe
2016-07-04 18:20:32 +08:00
@yanyuan2046
@csdreamdong
定时任务这样就行不通了
csdreamdong
2016-07-04 18:28:10 +08:00
@strahe 0 0 还没做实验,但从 header 上来看。唯一能影响的就是 cookies 。
每次请求钱,先访问一次 https://www.bw.com ,拿到 cookies 。。再请求 。应该可行。。。
b821025551b
2016-07-04 18:31:08 +08:00
@yanyuan2046
@csdreamdong

你们忽略了一点,爬虫和浏览器的很大区别是,大部分爬虫没有 js 引擎的支持,而这个网站很可能是启用了 js 引擎校验。
@csdreamdong 既然你贴出了 curl 的方法,那试着去实际请求一下。
z333d
2016-07-04 19:20:43 +08:00
大概这么一个步骤(Python):
1. 打开 chrome 开发者工具,选到 network 面板,如果页面已经渲染过,则再刷新一下
2. 找到这个页面的请求链接,右键 copy as cUrl
3. 把拷贝的内容贴到 http://curl.trillworks.com ,选择 Python ,转换得到的代码在你安装了 requests 这个包的前提下便可以运行
建议可以用 ipython notebook 进行 cookies , headers 字段的选择

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

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

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

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

© 2021 V2EX