使用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,当某个期刊的影响因子为空或未知时,则这个期刊必须要在最末的位置,否则代码就可能产生异常,并且在最后的结果不会输出影响因子未知的期刊。

代码如下:

  1. #!/usr/bin/python
  2. #coding=utf-8
  3. import urllib
  4. import urllib2
  5. import re
  6. import time
  7.  
  8. global rank
  9. global num
  10. url = 'http://www.medsci.cn/sci/index.do?action=search'
  11. headers = {
  12. 'POST':url,
  13. 'Host':'www.medsci.cn',
  14. 'Origin':'http://www.medsci.cn',
  15. "Referer":"http://www.medsci.cn/sci",
  16. "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36",
  17. }
  18. value = {
  19. "fullname": "",
  20. "province": "医学",
  21. "city": '',
  22. "impact_factor_b": "",
  23. "impact_factor_s": "",
  24. "rank": "if_rank_b",
  25. "Submit": "我要查询"
  26. }
  27.  
  28. def getData(impact):
  29. value["impact_factor_b"] = impact
  30. data = urllib.urlencode(value);
  31. req = urllib2.Request(url, data)
  32. for key in headers:
  33. req.add_header(key, headers[key])
  34. response = urllib2.urlopen(req)
  35. html = response.read();
  36. return html
  37.  
  38. def saveData(html, rank):
  39. r1 = re.findall(r'_blank >([A-Z|\-|a-z|\s|\(|\)|&]*?)</a>', html);
  40. r2 = re.findall(r'<br>([A-Z|a-z|\-|\s|&|\(|\)]+?)</td>', html);
  41. r3 = re.findall(r'\n([0-9|.]+?)[\s|<]', html);
  42.  
  43. le1 = len(r1)
  44. le2 = len(r2)
  45. le3 = len(r3)
  46. le = le1
  47. if le2 < le:
  48. le = le2;
  49. if le3 < le:
  50. le = le3
  51.  
  52. count = 0
  53. flag = True
  54. if le < 50:
  55. flag = False
  56. while count < le and rank < num:
  57. rank += 1
  58. #print 'count:',count,', le:',le,', rank:',rank,",num:",num
  59. str1 = str(rank)+","+r1[count]+","+r2[count]+","+r3[count]+"\n"
  60. count += 1
  61. f.write(str1)
  62.  
  63. return r3[count-1], rank,flag #return the last impact
  64.  
  65. if __name__ == "__main__":
  66. f = open("res.csv","w+")
  67. impact = 0
  68. rank = 0
  69. num = 100
  70. flag = True
  71. while rank < num and flag:
  72. html = getData(impact);
  73. impact, rank, flag = saveData(html, rank);
  74. print 'already get data number:',rank
  75. time.sleep(2);
  76. f.close()
  77. print 'finished!'

使用python爬取MedSci上的期刊信息的更多相关文章

  1. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

  2. steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 不知不觉,一年一度如火如荼的steam夏日促销悄然开始了.每年通过大大小小 ...

  3. 零基础爬虫----python爬取豆瓣电影top250的信息(转)

    今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...

  4. Python编写网页爬虫爬取oj上的代码信息

    OJ升级,代码可能会丢失. 所以要事先备份. 一開始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启示和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 p ...

  5. Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

  6. 利用Python爬取OPGG上英雄联盟英雄胜率及选取率信息

    一.分析网站内容 本次爬取网站为opgg,网址为:” http://www.op.gg/champion/statistics” 由网站界面可以看出,右侧有英雄的详细信息,以Garen为例,胜率为53 ...

  7. python爬取豌豆荚中的详细信息并存储到SQL Server中

    买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...

  8. 用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好

    网易商品评论爬取 分析网页 评论分析 进入到网易精选官网,搜索“文胸”后,先随便点进一个商品. 在商品页面,打开 Chrome 的控制台,切换至 Network 页,再把商品页Python入门到精通学 ...

  9. python爬取智联招聘职位信息(多进程)

    测试了下,采用单进程爬取5000条数据大概需要22分钟,速度太慢了点.我们把脚本改进下,采用多进程. 首先获取所有要爬取的URL,在这里不建议使用集合,字典或列表的数据类型来保存这些URL,因为数据量 ...

随机推荐

  1. Django: 之数据库完美解析

    Python的web矿建有Django.Tornado.Flask等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定,模版引擎.缓存.Session等诸多功能. ...

  2. 고 보니: 做完A发现新的事实B

    1. 선생님 얘기를 듣고 보니 이제 이해가 되네요. 2. 막상 옷을 입고 보니 꽤 잘 어우리는 것 같았다. 不能用于过去式 다 보니和 고 보니区别 다 보니: 表示在做某事过程中发现某状 ...

  3. POJ2096 概率dp 入门

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=118282#problem/B 挺好的一个题目: 不过刚开始嘛,看别人题解长知识.这个人写 ...

  4. 写入cookie后只显示一次的DIV提示框代码

    <script type="text/javascript"> function cookiesave(n, v, mins, dn, path){ if(n) { i ...

  5. Request 地址栏传值

    request页面 protected void btnSearch_Click(object sender, EventArgs e) { Response.Redirect("Reque ...

  6. Ubuntu系统如何修改主机名

    1.执行命令 hostname temp_name 这样主机名就改掉了.只不过重启后名字会恢复不一定使我们想要的.机器重启后会重新去读取/etc/hostname里面存储的主机名.所以如果想永久改掉的 ...

  7. Gerald and Giant Chess

    Gerald and Giant Chess time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  8. thin-provisioning-tools

    公司我还用着squeeze,没这个包,下载编译:https://github.com/jthornber/thin-provisioning-tools.git

  9. 如何高效的用判断用js判断ie6

    用js判断ie6的方法有很多,如: 1. var isIE=!!window.ActiveXObject; var isIE6=isIE&&!window.XMLHttpRequest ...

  10. iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。

    转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage ...