科研最前沿,关注最新期刊发表的文章,需要获取current issue的文章信息,我想着用自动化的方式,来抓取所有最新文章的标题,知道发表了那些文章。
写在前面
大致的流程如下:
1. 分析网页并选取元素
web自动化最关键的部分就是如何查找到你需要的元素,只要我们可以找到元素,那么我们就可以去进行执行相关操作,实验web自动化。
-
首先我们使用F12查看网页的代码,进入开发者页面。或者在网页上右键选择检查,就会出现网页代码页面。
-
首页上我们可以看到current issue的连接入口,点击就可以进入当前的最新一期的文章页面。我们看一下这个链接的HTML源码,看看是什么样的元素。有两种方法可以快速定位到这个元素:
-
把鼠标移动到元素上面,然后右击,同样选择检查,就会直接定位到这个元素在HTML源码中的位置。
-
选择右边源码窗口最左上角的带箭头的框,点击一下,然后就再把鼠标移到页面中想要查看源码的位置,然后点击,之后也同样对应到相同的位置。
-
-
我们可以看到这个元素是一个href属性的链接,但是我们为了方便每次都可以直接运行,而不想去改这个代码,那么需要找到一个元素其链接是不会变的。
-
网页中,确实有一个位置,如图:
2. 代码实现
# 导入我们需要的模块
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
# 创建驱动对象,指明使用Chrome浏览器驱动
# 因为已经是全局变量,就不用在里面写路径
wd = webdriver.Chrome()
wd.implicitly_wait(10)
# 调用webdriver对象的get方法,请求打开指定浏览器
wd.get('http://www.plantcell.org/')
# 移动鼠标到Content悬停
ac = ActionChains(wd)
ac.move_to_element(
wd.find_element_by_css_selector('[class="sf-with-ul"]')
).perform()
# 找到current issue元素,找到href链接,然后点击鼠标。
link = wd.find_element_by_css_selector('li[class*="odd"] > a[href*="current"]')
link.click()
#找到所有的标题内容
elements = wd.find_elements_by_css_selector('span.highwire-cite-title')
# 打印我们需要的标题内容,前面两个和倒数第一个不是,我们选取我们需要的打印。
for element in elements[2:-1]:
print(element.text)
print()
# 关闭浏览器
wd.quit()
3. 获取内容比对
比对之后发现,没有错误,可以正确执行。以后直接运行这个代码,就可以获得最新期刊内容。