爬虫在web of science 中的应用(1.0版本讲解)

为何开始爬英文网站?而不从中文呢网站入手?

最早,我是从写中文网站的爬虫开始的,过程中遇到各种各样关于编码的奇怪问题后,为了不打击我的信心,我先从英文网站开始吧。英文网站那么多,先从哪个开始呢? 由于自己现在还是研究生,用的最多的网站是web of science,因此先从这个网站开始吧。

版本号:1.0

实现功能:

缘由:有时候,我在搜索一个主题的时候,在web of science键入关键词后,会有很多很多的文献,一页一页的翻很慢,如果能把所有文献的题目一次性导出那该有方便。
在写之前,首先导入一些常见的用于爬虫的库

import requests
from lxml import etree

其中requests库是用来获取网站信息,例如编码方式,头部信息等等,以及向网站传递信息等等。而lxml中的etree则是根据需要来提取request库中得到的网页源代码中
的信息。

例如在web of science中输入主题词water,如图1显示搜索结果有69w多条,

图1.png

每一页显示10篇文章的信息,查看一下第1-2页的URL(理解为网址),分别如下

第一页: http://apps.webofknowledge.com/summary.do?product=UA&colName=&qid=34&SID=8EVHgmFwQyO7vUv8d9U&search_mode=GeneralSearch&formValue(summary_mode)=GeneralSearch&update_back2search_link_param=yes&page=1
第二页:http://apps.webofknowledge.com/summary.do?product=UA&parentProduct=UA&search_mode=GeneralSearch&parentQid=&qid=34&SID=8EVHgmFwQyO7vUv8d9U&colName=&&update_back2search_link_param=yes&page=2
比较两个URL,可以发现二者只是page=后面的数字不一样,因此,可以根据总页数,构建URL。

以第一页为例,代码可以轻松的写出来了

import requests
from lxml import etree
url = " http://apps.webofknowledge.com/summary.do?product=UA&colName=&qid=34&SID=8EVHgmFwQyO7vUv8d9U&search_mode=GeneralSearch&formValue(summary_mode)=GeneralSearch&update_back2search_link_param=yes&page=1"

然后利用浏览器模拟人浏览网站,这里要用到response.get()方法,get()方法用法如下:
response.get(url,headers)

其中,url为要网站名,headers可以理解为爬虫的外衣,它是借助这个模拟浏览器,header信息可以按F12 找到,如图2

图2.png

其中最下面的Use-Agent即为headers的值,属性为字典形式,因此要写成

headers = {"User-Agent":
           "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
          }

然后使用get()方法浏览网站

r = requests.get(url,headers=headers)
r.encoding = r.apparent_encoding

r.encoding = r.apparent_encoding

这句一般可以当做模板,是关于网站编码方式的。对于英文网站,不写也没关系。但是,对于中文一定要注意编码方式,否则会很心累的(难受)。
网页源代码是存放在r的text属性中的(说一下,text存放文本信息,而content存放的是二进制信息)。

了解过一点HTML语言的人都知道,网页源代码是由一个个标签组成的,比如<div>...</div>,标签是对称的。但有的网站可能标签并不是对称的,由头但没有尾,因此要让网页源代码更规范一点,这样更加有利于从中找到我们需要的信息。这里就要用到etree中的HTML方法了。它的作用就是让源代码更加规范。

html = etree.HTML(r.text)

好了。我们下面就要从源代码里找到文章的题目了
按下F12键,定位到文章题目那边,在图3中可以发现

图3.png

文章的题目藏在a标签(属性为"smallV110 snowplow-full-record")下的value的文本中,所以很快就写出标题(title)的xpath路径

xpath('//a[@class="smallV110 snowplow-full-record"]/value/text()')

等等,不要高兴的太早,得到的结果中并没有包含自标签下的文字,所以text()方法只能获得当前标签下的文本,如果还想要获得子节点下的文本,需要用到string()方法
因此代码及解释如下:

names= html.xpath('//a[@class="smallV110 snowplow-full-record"]/value')
这步是为了得到所有value下的内容,names为列表,为可迭代对象,为了得到其中每一个元素,需要用for in

titles = []
for name in names:
titles.append(name.xpath('sting(.)')

其中点(·)表示当前节点下(一种省略的写法)

其实最简单的写法是用列表表达式写:

titles = [name.xpath('sting(.)') for name in names]

最后的代码如下

import requests
from lxml import etree
# import html
#下载一个网页

#登录 (可以写成函数)
headers = {"User-Agent":
           "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
          }

url = "http://apps.webofknowledge.com/summary.do?product=UA&parentProduct=UA&search_mode=GeneralSearch&parentQid=&qid=34&SID=8EVHgmFwQyO7vUv8d9U&&update_back2search_link_param=yes&page=1"
r = requests.get(url,headers=headers)
r.encoding = r.apparent_encoding

html = etree.HTML(r.text) 
names= html.xpath('//a[@class="smallV110 snowplow-full-record"]/value') #names为list属性  names列表有10个元素,对应每个标题
#读取出每个文献的题目
# print(len(names))
titles = [name.xpath('string(.)') for name in names]
for i in titles:
  print(i)

结果如下

Ozone ultrafine bubble water induces the cellular signaling involved in oxidative stress responses in human periodontal ligament fibroblasts

Development of Oil-in-Water Microemulsions and Evaluation of Its Presence in the Treatment of Produced Water.

Detection of multi-antibiotic resistant Campylobacter coli and Campylobacter jejuni in beef, mutton, chicken and water buffalo meat in Ahvaz, Iran

An investigation of the concurrency of anti-Neospora antibody and parasitemia in water buffalo (Bubalus bubalis) in northwest of Iran

Adaptation of multiple regression analysis to identify effective factors of water losses in water distribution systems


Water Pipe Smoking Reduction in the Male Adolescent Students: An Educational Intervention Using Multi-Theory Model

The Assessment of Trihalomethanes Concentrations in Drinking Water of Hamadan and Tuyserkan Cities, Western Iran and Its Health Risk on the Exposed Population

Validity of a single antibody-based lateral flow immunoassay depending on graphene oxide for highly sensitive determination of E. coli O157:H7 in minced beef and river water.

Effect of dietary fiber-rich fractions on texture, thermal, water distribution, and gluten properties of frozen dough during storage.

Ferrocene-based nanoporous organic polymer as solid-phase extraction sorbent for the extraction of chlorophenols from tap water, tea drink and peach juice samples.

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容