使用Curl获取Nature Materials稿件状态页面失败问题排查
解决Nature Materials稿件状态页面Curl获取无结果的问题
作为经常折腾学术投稿系统爬虫的人,我一眼就揪出你命令里的几个问题,咱们一个个拆解:
1. Cookie文件名拼写错误
你第一个命令生成的cookie文件是./my_cookie(带下划线),但第二个命令里写的是mycookie(没下划线)——系统根本找不到正确的cookie文件,自然拿不到登录后的页面内容。修正后的第二个命令应该是:
curl --cookie ./my_cookie 'http://mts-nm.nature.com/cgi-bin/main.plex?form_type=status_details&j_id=8&ms_id=32234&ms_rev_no=0&ms_id_key=SFfgnknwkgnregKsdnflsfgqn' > parsed.html
2. 登录请求方式完全错了
你第一个curl用--user+GET请求访问登录页面,但Nature的MTS投稿系统是表单登录,不是HTTP基本认证。--user参数只适用于少数简单的认证场景,你需要先抓包看登录表单的字段名(比如用户名对应email、密码对应passwd这类),然后用POST请求提交登录数据:
curl --cookie-jar ./my_cookie -d "email=你的账号&passwd=你的密码" 'http://mts-nm.nature.com/cgi-bin/main.plex'
(提示:打开浏览器开发者工具的「网络」面板,看点击登录时提交的表单参数,替换成实际字段名)
3. 没开启重定向跟随
登录成功后系统大概率会自动跳转,curl默认不会处理重定向,得加-L参数让它自动跟进:
curl -L --cookie-jar ./my_cookie -d "email=你的账号&passwd=你的密码" 'http://mts-nm.nature.com/cgi-bin/main.plex'
4. 大概率被网站拦截了
很多学术系统会检测请求的User-Agent,curl默认UA太扎眼,你可以模拟浏览器的UA绕过检测:
curl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" --cookie-jar ./my_cookie -d "email=你的账号&passwd=你的密码" 'http://mts-nm.nature.com/cgi-bin/main.plex'
5. Grep匹配的小提醒
你的目标日期是16th May 18,用grep 'May 18'其实能匹配到,但前提是前面的步骤正确拿到了页面内容。如果还是没结果,可以先试试grep 'May' parsed.html确认页面是否有有效内容。
最后给个小测试方法:执行登录命令后,查看my_cookie文件是否有内容,如果是空的,说明登录没成功,重点排查POST表单的参数是否正确。
内容的提问来源于stack exchange,提问作者nofutur
相关产品推荐
相关产品推荐

