使用python爬取MedSci上的期刊信息
使用python爬取medsci上的期刊信息,通过设定条件,然后获取相应的期刊的的影响因子排名,期刊名称,英文全称和影响因子。主要过程如下:
首先,通过分析网站http://www.medsci.cn/sci的交互过程。可以使用谷歌或火狐浏览器的“审查元素-->Network”,然后就可以看到操作页面就可以看到网站的交互信息。当在网页上点击“我要查询”时,网页会发送一个POST消息给服务器,然后,服务器返回查询结果
然后,将查询到的结果使用正则表达式提取出需要的数据。
最后将提取出的数据输出到文件。
代码的关键在于分析POST数据报,找出需要发送到服务器的数据,以及HTTP的报文头的填写。
通过浏览器的“审查元素-->Network-->POST的链接-->Headers”,能够找到一个form Data的数据表格,这个数据表格保存着所有的查询条件。
在代码中通过对这些数据表格进行赋值,即可模拟浏览器发送post请求,然后将得到html代码。接下来只需对获取到的数据做进一步的处理即可。
代码中的部分变量做简单的说明:
num:表示要获取的期刊的数目
value中的参数保存着查询条件:每个子条件的参数名意义如下:
fullname:期刊关键字
province:期刊领域中的大类
city:期刊中的二级分类、
impact_factor_b:IF范围小于的值
impact_factor_s:IF范围大于的值
rank:排列方式
这个代码有个bug,当某个期刊的影响因子为空或未知时,则这个期刊必须要在最末的位置,否则代码就可能产生异常,并且在最后的结果不会输出影响因子未知的期刊。
代码如下:
- #!/usr/bin/python
- #coding=utf-8
- import urllib
- import urllib2
- import re
- import time
- global rank
- global num
- url = 'http://www.medsci.cn/sci/index.do?action=search'
- headers = {
- 'POST':url,
- 'Host':'www.medsci.cn',
- 'Origin':'http://www.medsci.cn',
- "Referer":"http://www.medsci.cn/sci",
- "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36",
- }
- value = {
- "fullname": "",
- "province": "医学",
- "city": '',
- "impact_factor_b": "",
- "impact_factor_s": "",
- "rank": "if_rank_b",
- "Submit": "我要查询"
- }
- def getData(impact):
- value["impact_factor_b"] = impact
- data = urllib.urlencode(value);
- req = urllib2.Request(url, data)
- for key in headers:
- req.add_header(key, headers[key])
- response = urllib2.urlopen(req)
- html = response.read();
- return html
- def saveData(html, rank):
- r1 = re.findall(r'_blank >([A-Z|\-|a-z|\s|\(|\)|&]*?)</a>', html);
- r2 = re.findall(r'<br>([A-Z|a-z|\-|\s|&|\(|\)]+?)</td>', html);
- r3 = re.findall(r'\n([0-9|.]+?)[\s|<]', html);
- le1 = len(r1)
- le2 = len(r2)
- le3 = len(r3)
- le = le1
- if le2 < le:
- le = le2;
- if le3 < le:
- le = le3
- count = 0
- flag = True
- if le < 50:
- flag = False
- while count < le and rank < num:
- rank += 1
- #print 'count:',count,', le:',le,', rank:',rank,",num:",num
- str1 = str(rank)+","+r1[count]+","+r2[count]+","+r3[count]+"\n"
- count += 1
- f.write(str1)
- return r3[count-1], rank,flag #return the last impact
- if __name__ == "__main__":
- f = open("res.csv","w+")
- impact = 0
- rank = 0
- num = 100
- flag = True
- while rank < num and flag:
- html = getData(impact);
- impact, rank, flag = saveData(html, rank);
- print 'already get data number:',rank
- time.sleep(2);
- f.close()
- print 'finished!'
使用python爬取MedSci上的期刊信息的更多相关文章
- python爬取当当网的书籍信息并保存到csv文件
python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...
- steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 不知不觉,一年一度如火如荼的steam夏日促销悄然开始了.每年通过大大小小 ...
- 零基础爬虫----python爬取豆瓣电影top250的信息(转)
今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...
- Python编写网页爬虫爬取oj上的代码信息
OJ升级,代码可能会丢失. 所以要事先备份. 一開始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启示和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 p ...
- Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢
- 利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息
一.分析网站内容 本次爬取网站为opgg,网址为:” http://www.op.gg/champion/statistics” 由网站界面可以看出,右侧有英雄的详细信息,以Garen为例,胜率为53 ...
- python爬取豌豆荚中的详细信息并存储到SQL Server中
买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...
- 用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好
网易商品评论爬取 分析网页 评论分析 进入到网易精选官网,搜索“文胸”后,先随便点进一个商品. 在商品页面,打开 Chrome 的控制台,切换至 Network 页,再把商品页Python入门到精通学 ...
- python爬取智联招聘职位信息(多进程)
测试了下,采用单进程爬取5000条数据大概需要22分钟,速度太慢了点.我们把脚本改进下,采用多进程. 首先获取所有要爬取的URL,在这里不建议使用集合,字典或列表的数据类型来保存这些URL,因为数据量 ...
随机推荐
- Django: 之数据库完美解析
Python的web矿建有Django.Tornado.Flask等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定,模版引擎.缓存.Session等诸多功能. ...
- 고 보니: 做完A发现新的事实B
1. 선생님 얘기를 듣고 보니 이제 이해가 되네요. 2. 막상 옷을 입고 보니 꽤 잘 어우리는 것 같았다. 不能用于过去式 다 보니和 고 보니区别 다 보니: 表示在做某事过程中发现某状 ...
- POJ2096 概率dp 入门
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=118282#problem/B 挺好的一个题目: 不过刚开始嘛,看别人题解长知识.这个人写 ...
- 写入cookie后只显示一次的DIV提示框代码
<script type="text/javascript"> function cookiesave(n, v, mins, dn, path){ if(n) { i ...
- Request 地址栏传值
request页面 protected void btnSearch_Click(object sender, EventArgs e) { Response.Redirect("Reque ...
- Ubuntu系统如何修改主机名
1.执行命令 hostname temp_name 这样主机名就改掉了.只不过重启后名字会恢复不一定使我们想要的.机器重启后会重新去读取/etc/hostname里面存储的主机名.所以如果想永久改掉的 ...
- Gerald and Giant Chess
Gerald and Giant Chess time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- thin-provisioning-tools
公司我还用着squeeze,没这个包,下载编译:https://github.com/jthornber/thin-provisioning-tools.git
- 如何高效的用判断用js判断ie6
用js判断ie6的方法有很多,如: 1. var isIE=!!window.ActiveXObject; var isIE6=isIE&&!window.XMLHttpRequest ...
- iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。
转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage ...