python爬取pubmed的文献_爬虫获取pubmed中文献的标题和摘要

为了满足快速浏览pubmed中相关文献标题和摘要的需求,写了个简单的爬虫(目前只实现了单个关键词以及多个关键词的and检索),用于批量获取感兴趣文献的标题和摘要。

使用编辑器是python,所编写的爬虫主要使用requests模块+正则表达式。使用requests.get()来获取请求,使用re模块中re.compile(正则表达式).findall(请求)来获取标题和摘要。代码中对浏览器进行了伪装,但是就只用了2个浏览器。

import requests

import re

key=input("请输入你想查找的信息:")

local_url=input("请输入你想存储的位置及名称:")

turl="https://pubmed.ncbi.nlm.nih.gov/"

tdata=requests.get(turl,params={"term":key}).text

pat_allpage='(.*?)'

allpage=re.compile(pat_allpage,re.S).findall(tdata)

num=input("请输入大致想获取的文章数目(总数为"+str(int(allpage[0].replace('\n ','').replace(',',''))*10)+"):")

for j in range(0,int(num)//10+1):

url="https://pubmed.ncbi.nlm.nih.gov/"+"?term="+key+"&page="+str(j+1)

data=requests.get(url,params={"term":key}).text

pat1_content_url='

.*?<.>'

content_url=re.compile(pat1_content_url,re.S).findall(data)

hd={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400'}

for i in range(0,len(content_url)):

curl="https://pubmed.ncbi.nlm.nih.gov/"+content_url[i]

try:

cdata=requests.get(curl,headers=hd).text

pat2_title="

(.*?)"

pat3_content='

(.*?)
'

pat4_date='(.*?)'

title=re.compile(pat2_title,re.S).findall(cdata)

print("正则爬取的题目是:"+title[0])

content=re.compile(pat3_content,re.S).findall(cdata)

date=re.compile(pat4_date,re.S).findall(cdata)

fh=open(local_url+".html","a",encoding="utf-8")

fh.write(str(title[0])+' ----'+str(date[0])+"
"+str(content[0])+"
")

fh.close

except Exception as err:

pass

if int(num) < 10:

if i+1 == int(num):

break

elif int(num) == 10:

if i == 9:

break

elif (j*10)+i+1 == int(num):

break

将上述代码保存为.py格式,进入终端运行代码:

python 文件名.py

输入关键词(target%3bmutation)、保存路径及名称(G:\爬虫学习\drug_mutation)、想获取的文章数(7):

#多个关键词需要使用分号分隔,在输入中需要将分号改为‘%3bmutation’

得到.html格式的文件:标题----时间 摘要

遇着的问题:

1.在运行程序时会出现错误,再次运行错误就会消失;(可能是网络问题,也有可能是访问太多次被拒,过段时间再运行即可)

2.速度有点慢;(可能是网慢,导致请求返回的比较慢)

未来进行改进的地方:

1.点击标题可以对该文章进行下载;2.确定输入不为整数的文章数时,少用if语句;3.可以对文章发布时间进行选择;4.除了实现and的检索,还能实现or、not的检索

刚开始研究爬虫,有什么建议,欢迎提出来!有不懂的,一起探讨!

标签:num,url,摘要,爬虫,content,re,pubmed,requests,findall

来源: https://blog.csdn.net/qq_40270119/article/details/106503093

你可能感兴趣的:(python爬取pubmed的文献_爬虫获取pubmed中文献的标题和摘要)