PubMed 是一个提供生物医学方面的论文搜寻以及摘要,并且免费搜寻的数据库。是一个做生物方面经常要用到的一个查找文献的网站。最近刚学了爬虫相关的知识包括urllib库,requests库,xpath表达式,scrapy框架等。就想着去爬一下PubMed,就当练练手,准备根据搜索的关键字爬取PubMed上近五年发表文章数量,以此为依据来看看该研究方向的近五年的热门程度。
最开始的想法是利用scrapy框架去进行爬取和存储的。于是打开PubMed开始分析网页构成,源代码等。发现NCBI使用的是动态网页,进行翻页,搜索关键字等操作时网址没有发生变化。于是我想到了爬虫神器之一的selenium模块,利用selenium进行模拟搜索,翻页等操作,再分析源代码获取想要的信息。由于接触selenium并不多,有些函数是临时网上查找的。
1、 加载需要用到的模块
import urllib
import time
import matplotlib.pyplot as plt
import numpy as np
from lxml import etree
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
from collections import Counter
2、通过关键字构造网址
自己手动输入几个关键字,分析出网址的构造。
PubMed的原始链接为'https://www.ncbi.nlm.nih.gov/pubmed',当输入并搜索'cancer,TCGA,Breast'时,url变成了'https://www.ncbi.nlm.nih.gov/pubmed/?term=cancer%2CTCGA%2CBreast'。于是不难分析出网址由两部分组成,一部分是不变的'https://www.ncbi.nlm.nih.gov/pubmed/?term=',另一部分由我们搜索的关键字由字符串'%2C'拼接而构成。因此对于传进来的'keyword',我们可以做以下处理,拼接成搜索后返回的url
keyword = '%2C'.join(keyword)
tart_url = 'https://www.ncbi.nlm.nih.gov/pubmed/?term='
url = start_url + keyword
这样我们就简单地把返回的url拼接好了。
3、创建浏览器对象
下一步是使用selenium模块打开我们的Chrome浏览器并且跳转到url的界面。相信大家都对这个操作比较熟悉了。因为我们待会要进行模拟点击翻页等操作,因此需要实例化一个WebDriverWait对象,方便后续进行调用
browser = webdriver.Chrome()
self.browser.get(url)
wait = WebDriverWait(browser, 10)
对网页进行模拟点击
打开了网页之后我们需要对网页进行模拟点击,首先我们要查找的是近五年的文章,所以需要模拟点击左边的5years的按键以及将单页显示的文章数量改成200,这样可以减少我们的翻页操作

本文介绍了如何使用Python的Selenium库爬取PubMed网站,获取特定关键字在近五年内的文献数量。通过模拟点击浏览器操作,解决动态网页问题,实现了对PubMed的高效爬取和数据提取,以便于分析研究方向的热度变化。
最低0.47元/天 解锁文章
216

被折叠的 条评论
为什么被折叠?



