使用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 importurllib4 importurllib25 importre6 importtime7

8 globalrank9 globalnum10 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": "0",23 "impact_factor_s": "0",24 "rank": "if_rank_b",25 "Submit": "我要查询"

26 }27

28 defgetData(impact):29 value["impact_factor_b"] =impact30 data =urllib.urlencode(value);31 req =urllib2.Request(url, data)32 for key inheaders:33 req.add_header(key, headers[key])34 response =urllib2.urlopen(req)35 html =response.read();36 returnhtml37

38 defsaveData(html, rank):39 r1 = re.findall(r‘_blank >([A-Z|\-|a-z|\s|\(|\)|&]*?)‘, html);40 r2 = re.findall(r‘
([A-Z|a-z|\-|\s|&|\(|\)]+?)‘, html);41 r3 = re.findall(r‘\n([0-9|.]+?)[\s|

43 le1 =len(r1)44 le2 =len(r2)45 le3 =len(r3)46 le =le147 if le2 <48 le="le2;49" if le3>

52 count =053 flag =True54 if le < 50:55 flag =False56 while count < le and rank <57 rank>

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 =068 rank =069 num = 100

70 flag =True71 while rank < num andflag:72 html =getData(impact);73 impact, rank, flag =saveData(html, rank);74 print ‘already get data number:‘,rank75 time.sleep(2);76 f.close()77 print ‘finished!‘

原文:http://www.cnblogs.com/liuwu265/p/4106979.html

57>48>

python爬取文献代码_使用python爬取MedSci上的影响因子排名靠前的文献相关推荐

  1. python画pr曲线代码_利用Python中的numpy包实现PR曲线和ROC曲线的计算

    闲来无事,边理解PR曲线和ROC曲线,边写了一下计算两个指标的代码.在 python 环境下,sklearn里有现成的函数计算ROC曲线坐标点,这里为了深入理解这两个指标,写代码的时候只用到numpy ...

  2. python推箱子游戏代码_用python入门知识做推箱子游戏,若能打过第三关,则可以学会编程...

    不得不说,Python小游戏是最适合入门编程的项目,因为太简单! 无论懂或完全不懂python,这样的小游戏,你都可以直接开发出来,原因很简单: 在详细教程里,会有从零基础开始,一步一步的教你完成这个 ...

  3. python数据预处理的代码_【Python基础系列】常见的数据预处理方法(附代码)

    ↑↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜 本文简单介绍python中一些常见的数据预处理,包括数据加载.缺失值处理.异常值处理.描述性变量转换为数值型.训练集测试集划分.数据规范化. 1. ...

  4. python英雄对战代码_用 Python 分析了 1982 场英雄联盟数据,开局前预测游戏对局胜负!...

    前言 如今,只要随便进入一个网吧,都会发现玩<英雄联盟>的人是最多的,可以这么说,<英雄联盟>已经是当之无愧的端游一哥.而在拥有如此基数玩家的<英雄联盟>,已经不仅 ...

  5. python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结

    利用Python实现对考勤打卡数据处理的总结 一.背景交代 二.说明 三. 8种方法 1. 查看文件是否存在 2. 导入excel文件,并把数据保存为dataframe格式 3. 计算程序运行时间 4 ...

  6. python输入汉字的代码_基于python的汉字转GBK码实现代码

    如图,"广"的编码为%B9%E3,暂且把%B9称为节编码,%E3为字符编码(第二编码). 思路: 从GBK编码页面收集汉字 http://ff.163.com/newflyff/g ...

  7. python英文词云代码_使用python实现个性化词云的方法

    先上图片 词云图 需要模板 pip install jieba pip install wordcloud 还需要安装另外两个东西这两个我也不太懂借鉴百度写上去的 pip install scipy ...

  8. python绘制繁花曲线代码_使用python和pygame绘制繁花曲线的方法

    前段时间看了一期<最强大脑>,里面各种繁花曲线组合成了非常美丽的图形,一时心血来潮,想尝试自己用代码绘制繁花曲线,想怎么组合就怎么组合. 真实的繁花曲线使用一种称为繁花曲线规的小玩意绘制, ...

  9. python怎么运行matlab代码_用python运行matlab代码

    我得到了一个错误:Traceback (most recent call last): File "", line 1, in File "C:\Users\XYZ\Ap ...

最新文章

  1. Log4cplus1.04的使用
  2. Facebook又放大招!开源框架Pythia让深度学习更高效
  3. NLayerAppV3-Distributed Service Layer(分布式服务层)
  4. PLSQL_day01
  5. C 语言结构体_点运算符( . )和箭头运算符( - )的区别
  6. 将字符串转换为列显示
  7. 通过样式class也是可以控制超链接是否弹窗
  8. tp中  M和 D的区别
  9. zookeeper安装_Centos7安装配置Zookeeper
  10. 物联那点事儿之自制网络温湿度计(arduino+点灯科技篇)
  11. Ruff Chain 将亮相新加坡WDAS 2018世界数字资产峰会
  12. android 按键 设置在哪,如何在Android设备上设置按键和按键?
  13. reached end of file while parsing
  14. 技能分享 | 麦肯锡教给我的写作武器:如何讲好一句话
  15. word文档封面免费下载_为Word 2007文档添加封面
  16. 做你喜欢做的事,财富会随之而来
  17. 上传文件的几种主要方法。
  18. 微星B550M MORTAR WIFI 的蓝牙模块消失的解决办法
  19. 打开浏览器显示找不到服务器DNS地址,电脑浏览器找不到服务器dns地址
  20. 八、Docker Swarm

热门文章

  1. python 录音本地转文字_Waston+Python,6行代码实现音频转文字,轻松做字幕~
  2. UVALive - 3938 Ray, Pass me the dishes!
  3. 数值分析(10):数值积分之Gauss型求积公式
  4. ShardingSphere 从源码查看hint为什么失效
  5. 4、QT背景音乐设置,动图的播放
  6. JAVA语言:利用递归方法判断字符串是否为回文
  7. Excelize 发布 2.1.0 版本, Go 语言最受欢迎的 Excel 基础库
  8. 中国最年长慰安妇对日索赔20年无果去世-慰安妇-对日索赔-日本侵华战争
  9. web包下载_Plex Home Theater免费版下载-多功能媒体播放器 v1.4.1.469 免费版
  10. CSP 201712-4 行车路线 迪杰斯特正解