请教一个问题 英文题

新手请教一个问题。。 - CNode技术社区
Here art thou!
有这样一个需求,就是模拟浏览器登录。
需要这样做:
先get一次某url :LOGIN_URL拿到必须的参数
接着post这个LOGIN_URL,把上一步get到的数据重新组织POST过去
我用的是needle
needle.get(LOGIN_URL, function(err, resp, body){
//process parameters
needle.post(LOGIN_URL, function(err, resp, body){
//到这里就会卡住,post不出去,
请问该怎么解决?
POST 不出去? 是报错了还是回调函数没有执行?
推荐用request :
个人觉得needle不太好用
回调执行了,post那一块卡住了,因为超时
谢谢,试一下
超时为啥不怀疑是服务器问题?
因为换成别的URL一样超时
擦。好像还真是服务器的问题。不好意思我再测试一下。。刚来Node,有很多不知道的地方。。
GET请求只需要发送header即可,POST请求还需要发送body的,你这个代码很明显就没有发送body嘛,仔细看一下文档怎么用吧
文档中的示例是这样的:
var data = {
token: 'verysecret',
payload: {
value: JSON.stringify({ title: 'test', version: 1 }),
content_type: 'application/json'
needle.post('http:/&#/', data, { timeout: 5000, multipart: true }, function(err, resp, body){
// in this case, if the request takes more than 5 seconds
// the callback will return a [Socket closed] error
不知道你有没有看过文档!!!
还有,帖子标题应该简单地描述一下问题,而不是“新手请教一个问题。。”
好吧。。确实确实没仔细看。。想当然了。。。
request的cookie你成功过没,无论怎么样cookiejar都是空的
sorry,因为本来cookie就是空的。。。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的本帖子已过去太久远了,不再提供回复功能。请教一个爬虫问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
推荐学习书目
Python Sites
值得关注的项目
Python 编程
请教一个爬虫问题
16:37:34 +08:00 · 2113 次点击
想要抓取一个网站的数据,但是网站好像做了防爬虫处理,有什么方法可以绕过这个,爬到数据.
31 回复 &| &直到
15:01:48 +08:00
& & 16:49:26 +08:00
貌似识别 js 引擎吧,在浏览器里写 js 。。。
& & 17:13:46 +08:00
需要爬哪些个数据有防爬?
比如算力页面:数据在
两个请求下就可得到。
没说要什么数据如何分析?
& & 17:18:44 +08:00
@ 我只是举个例子,就比如说
这个链接,如何抓取?
& & 17:25:37 +08:00
@ 这请求一次不就得到数据了么?你说的怎么抓取是什么意思?
& & 17:26:57 +08:00
@ requests 拿到源码,再通过 json 或正则提取需要的元素即可
& & 17:31:31 +08:00
你们回答问题之前先用 curl 看看能不能正确取到数据好么。
& & 17:31:38 +08:00
@ 你俩实际请求过吗? 别用浏览器打开
& & 17:40:43 +08:00
貌似 python 有模拟 js 引擎的库,简单的搜一下,比如这个: Spidermonkey
另外如果找到好的解决方案请楼主回复一下 :D
& & 17:53:17 +08:00
你浏览器访问一次拿到 cookie ,再用 cookie 爬不就好了。你会什么就用什么搞呗。
& & 17:56:55 +08:00
@ 把包括 cookie 在内的 header 全部拷贝近程序也不行
& & 17:57:41 +08:00
@ ip 相同吗?
& & 17:57:45 +08:00
@ 我试下,今天试了几个都不好使.
& & 18:06:05 +08:00
& & 18:07:39 +08:00
最简单的办法
1 、打开 chrome 开发者工具
2 、请求
3 、把抓到的 http header 全部添加到你的 python 爬虫中
4 、你的爬虫跟浏览器就是一模一样了
5 、如果 header 是动态的(不同请求,某个 http header 的值在变化,就分析这个值是怎么来的)
& & 18:13:14 +08:00
& & 18:15:33 +08:00
curl '' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch, br' -H 'Accept-Language: zh-CN,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. Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: no-cache' -H 'Cookie: __jsluid=c75018 __jsl_clearance=.423|0|a%2FIkug0lf8VyLrxcW4zgJNNtttE%3D; Hm_lvt_bb4a4d5e0b7e0cdfffc66c=; Hm_lpvt_bb4a4d5e0b7e0cdfffc66c=' -H 'Connection: keep-alive' --compressed
& & 18:20:32 +08:00
定时任务这样就行不通了
& & 18:28:10 +08:00
@ 0 0 还没做实验,但从 header 上来看。唯一能影响的就是 cookies 。
每次请求钱,先访问一次
,拿到 cookies 。。再请求 。应该可行。。。
& & 18:31:08 +08:00
你们忽略了一点,爬虫和浏览器的很大区别是,大部分爬虫没有 js 引擎的支持,而这个网站很可能是启用了 js 引擎校验。
@ 既然你贴出了 curl 的方法,那试着去实际请求一下。
& & 19:20:43 +08:00 via Android
大概这么一个步骤(Python):
1. 打开 chrome 开发者工具,选到 network 面板,如果页面已经渲染过,则再刷新一下
2. 找到这个页面的请求链接,右键 copy as cUrl
3. 把拷贝的内容贴到
,选择 Python ,转换得到的代码在你安装了 requests 这个包的前提下便可以运行
建议可以用 ipython notebook 进行 cookies , headers 字段的选择
& & 19:27:15 +08:00
你们这群人啊,根本就没去试,这网站是很特殊,发送的 header 完全一样却得不到一样的结果.
作为一个爬虫老司机,对这网站表示值得深入研究.
以前遇到过类似一样的站点,https 访问的时候连接的加密设置不同引起的
& & 19:31:03 +08:00
我可以肯定不是因为 cookie 引起的,用 burpsuite 重复发送是可以的,但是用 python 就不行,这与我以前遇到的站点类似.
当然这站点 cookie 会过期,这不是重点.
& & 19:50:06 +08:00
@ 什么很特殊,值得深入研究啊,就是个加速乐的 CDN 而已。
写一个 cookie , js 再算另一个,有时间限制,和 IP 环境绑定。 HTTP 协议就那么点东西,和你用什么发请求一点关系都没有。
怕麻烦就复制 cookie ,不怕麻烦就上 js 引擎。
& & 20:08:42 +08:00
@ 老司机研究一下,有结果了告知一下啊
& & 00:55:15 +08:00
好吧,我错了,其实这也一样只是 cookie 的问题.作为老司机,我必须再练下手,下面是解决的步骤:
准备工作:ubuntu 系统
1:首先安装 phantomjs
ubuntu 系统下 最新版
cd /usr/local/share/
sudo wget
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('/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('/pool/btcIndexChartsData?type=2',cookies=cookie)
print html.text
& & 09:32:35 +08:00
这头像好像我老师
你是珠海的?
& & 09:38:40 +08:00
@ 一个头像也可以? 杭州
& & 09:40:08 +08:00
@ 直接从它返回的 js 中找不出来 cookie 吗?必须要用 phantomjs?
& & 09:59:45 +08:00
@ 可以啊,你将这段 js 看懂,然后用自己的语言编写出同样功能的代码来.
& & 14:29:54 +08:00
@ 里面有一段 js 代码,恶心到我了。。怪不得我直接用 Selenium+PhantomJS 好像被卡住了一样。。。
while (window._phantom || window.__phantomas) {
};
& & 15:01:48 +08:00
@ 嗯, 解决这个站点不想利用 js 引擎,那就必须将这 js 翻译出来,写出同样功能的代码 , 难度有点高.
& · & 740 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.7.5 · 61ms · UTC 23:44 · PVG 07:44 · LAX 16:44 · JFK 19:44? Do have faith in what you're doing.

我要回帖

更多关于 请教一个问题 日语 的文章

 

随机推荐