使用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上的期刊信息的更多相关文章

  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. UI和UE有什么区别呢?

    UCD(以用户为中心的设计)UE(用户体验)UI(用户界面)HCI(人机交互)usability(易用性)

  2. PAT (Advanced Level) 1077. Kuchiguse (20)

    最长公共后缀.暴力. #include<cstdio> #include<cstring> #include<cmath> #include<vector&g ...

  3. iOS 热更新插件

    1.JSPatch 平台 http://jspatch.com/Docs/intro 2.React Native 中文文档 http://wiki.jikexueyuan.com/project/r ...

  4. Python3基础 函数 收集参数+普通参数 的示例

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  5. 编译内核启用iptables及netfilter

    在Network Packet Filtering Framework(Netfilter)一节中还有两个额外的配置节——Core Netfilter Configuration(核心Netfilte ...

  6. java采用Apache FileUpload组件实现上传

    可见:FileItemSteam(servletFileUpload.getItemIterator(httpServletRequest))速度要快于FileItem(servletFileUplo ...

  7. 链接器工具错误 LNK1123

    由于新学C++变成,找不到人求教,所以这个问题困扰了我很久,今天终于找到终极解决方案了: 出处,此帖25楼: http://bbs.csdn.net/topics/390121452 终极解决方案:V ...

  8. flume-1.6.0单节点部署

    这个不多说,直接上干货,部署很简单! 步骤一:flume的下载 当然,这里也可以使用wget命令在线下载,很简单,不多说. 步骤二:flume的上传 [hadoop@djt002 flume]$ ls ...

  9. CentOS x 64 MooseFS 学习

    一.MFS 简介.... MooseFS(Moose File System,mfs)是一种分布式文件系统,它将数据分布在网络中的 不同服务器上,支持FUSE,客户端可以作为一个 普通的Unix 文件 ...

  10. strlen sizeof strcat strcpy区别

      strlen(p): 能计算出p指向字符串的长度(以当前p的位置开始),不包含终止字符'\0': p可以声明为char* p或者char p[],这两种形式strlen均能正确计算. sizeof ...