科研领域把握-小白也可以使用Python爬Nature
作者:赵向阳 南京农业大学
责编:文涛 南京农业大学
文末提供爬虫代码,直接复制即可运行,或再github中下载源代码,地址在评论区置顶(今晚由于上传意外,exe程序在19年12月29日中午十二点之后在评论区置顶)。我们已经爬过微生物领域的多个期刊,敬请期待升级版本的exe程序,同时如果感兴趣的朋友可以留言:需要爬取的内容,或者期刊,之后我们会逐步升级到程序中。
大家可以扫此二维码加入讨论群中,并提出自己的建议
在研究过程中,尤其是在接触一个新的领域时,需要把握整个领域的整体发展,爬虫相关期刊是一个很好的方式,当然这需要一定的爬虫技术。
python爬虫是比较受欢迎的方式,我们的赵向阳在这方面很有经验,本次赵向阳通过关键词爬取Nature官网,作为演示,我们简单收集了文章的题目,DOI,作者,引用等信息,并输出文档。
为了让只要可以使用电脑的人都可以享受爬虫的方便之处,赵向阳也将该程序封装了.exe。请注意!就是大家直接双击就可以运行的爬虫。
首先从评论区提供的github地址下载Nature文件夹
第一步:打开nature文件夹,并在其中找到exe结尾的文件
第二步:双击运行exe文件:
运行结束会提示:本次我使用microbiome作为关键词,并下载前两页内容:
完成之后会在当前文件夹中生成一个data.csv的文件。打开就是我们需要的信息
代码
下面示例代码选用了microbiome的关键词,在nature官网搜索,并下载搜索内容前17页内容
import requests
import json
from lxml import etree
import time
#获取网页相应内容
def get_one_page(url):
try:
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
return None
except:
print("访问出错")
return None
def parse_one_page(html):
html = etree.HTML(html)
title = html.xpath('//*[@id="content"]/div/div/article/div[1]/div[1]/header/h1/text()')
Accesses = html.xpath('//*[@id="content"]/div/div/article/div[1]/div[1]/header/div/ul/li/p/text()')
DOI = html.xpath('//*[@id="article-info-content"]/div/div[2]/ul/li[4]/p/a/text()')
Published = html.xpath('//*[@id="content"]/div/div/article/div[1]/div[1]/header/ul[1]/li[3]/a/time/text()')
qikan = html.xpath('//*[@id="content"]/div/div/article/div[1]/div[1]/header/p/a[1]/i/text()')
author = html.xpath('//*[@id="content"]/div/div/article/div[1]/div[1]/header/ul[2]//text()')
Article_number = html.xpath('//*[@id="content"]/div/div/article/div[1]/div[1]/header/p/span[1]/text()')
print(title)
yield{
'title' : title,
'Accesses': Accesses,
'Published': Published,
'qikan': qikan,
'author': author,
'Article_number': Article_number,
'DOI': DOI
}
def get_paper_url(search, n):
url = 'https://www.nature.com/search?q=%s' % (search) + '&page=%d' % (n)
html = get_one_page(url)
html = etree.HTML(html)
href = html.xpath('//div/h2/a/@href')
for i in href:
url = 'https://www.nature.com'+str(i)
html = get_one_page(url)
for item in parse_one_page(html):
with open('data.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(item['title'], ensure_ascii=False))
f.write(json.dumps(item['DOI'], ensure_ascii=False))
f.write(json.dumps(item['qikan'], ensure_ascii=False))
f.write(json.dumps(item['Accesses'], ensure_ascii=False))
f.write(json.dumps(item['Published '], ensure_ascii=False))
f.write(json.dumps(item['Article_number'], ensure_ascii=False))
f.write(json.dumps(item['author'], ensure_ascii=False) + '\n')
time.sleep(2)
def main():
#搜索页数
search = "microbiome"
for i in range(1, 17):
try:
get_paper_url(search, i)
print('第%d页完成' %(i))
except:
print("出错")
print("第%d页出错" % (i))
continue
if __name__ == '__main__':
main()