查看原文
其他

Python爬虫之selenium爬取国家自然科学基金数据库(二)

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:杨长青

文字编辑:周聪聪

技术总编:张学人

好消息!!!爬虫俱乐部将于2019年7月5日至7月8日在武汉举行首期Python编程技术定制培训。本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python爬虫技术,并明确未来更进一步的学习方向。

详细培训大纲及报名方式,请点击文末阅读原文呦~


Python爬虫之selenium爬取国家自然科学基金数据库(一)》介绍了selenium的安装与配置,今天我们来实现资助类别和批准年度的选择以及如何输入申请代码。

资助类别和批准年度是如下所示的两个下拉框:

我们要做的是定位到这个下拉框,然后选择需要的数值。元素的定位我们这里介绍两种方式,一是根据id来定位,二是根据xpath表达式。首先,我们可以在谷歌浏览器点击F12调出开发者模式,通过Elements(下图标黄的位置)来查看HTML元素或CSS的属性。更方便的是可以点击下图标红的图标,然后通过鼠标在页面的位置,定位到文档中的元素的位置。

 查看批准年度对应的下拉框对应的网页元素:

这里id是固定的,可以通过:find_element_by_id("id_vaule")。也就是这里的find_element_by_id("f_year")定位到下拉框,也可以通过xpath来定位:find_element_by_xpath("//标签名[@属性='属性值']")。也就是这里的driver.find_element_by_xpath('//*[@id="f_year"]')。关于xpath的写法,大家可以通过下图的方法,点击copy XPath。

在定位到下拉框后,需要对其进行传值,也就是模仿浏览网页时下拉选择点击的动作。这里用到的是select函数:Select(WebElement element)。程序如下:

from selenium import webdriver #导入驱动模块webdriverdriver = webdriver.Chrome() #调用用环境变量中的谷歌浏览器创建浏览器对象url=r'https://isisn.nsfc.gov.cn/egrantindex/funcindex/prjsearch-list?locale=zh_CN'driver.get(url) #调用浏览器访问网站from selenium.webdriver.support.select import Select #selenium下拉选项操作selector = Select(driver.find_element_by_id("f_year"))selector.select_by_value("2000")  #通过value属性值进行选择

这里批准年度的值就自动选择了2000,类似的也可以对资助类别进行选择:

value=“218”对应面上项目,value=“220”对应重点项目,value=“222”对应重大项目,这里我们选择面上项目,程序如下:

selector1 =Select(driver.find_element_by_id("f_grantCode"))selector1.select_by_value("218")  #通过value属性值进行选择

以上解决了两个必选选项,还有一个是申请代码,申请代码这里的框。这个框我们可以通过输入学科代码,然后点击回车再自动补全。

这里使用send_keys(),在定位到输入框后往里面填值。程序如下:

driver.find_element_by_xpath('//*[@id="f_subjectCode"]').click()driver.find_element_by_xpath('//*[@id="f_subjectCode"]').send_keys("G0306") #定位time.sleep(0.3) #等待0.3s等待补全提示框弹出

回车我们需要使用selenium中的 Keys模块,它提供了很多常用的不可见的特殊按键,比如:

ENTER ——回车键,有时可用来代替点击提交按钮

SPACE ——输入空格

SHIFT(或LEFT_SHIFT) ——和其他按键同时发送,可发送大写字母或特殊符号

接下来,我们使用这个库在输入G0306后输入回车,程序如下:

time.sleep(0.3) #等待0.3s等待补全提示框弹出driver.find_element_by_xpath('//*[@id="f_subjectCode"]').send_keys(Keys.ENTER) #回车

 最后,我们将上述程序串在一起:

from selenium import webdriver #导入驱动模块webdriverfrom selenium.webdriver.support.select import Select #selenium下拉选项操作from selenium.webdriver.common.keys import Keys #键盘动作import time #时间库driver = webdriver.Chrome() #调用用环境变量中的谷歌浏览器创建浏览器对象url=r'https://isisn.nsfc.gov.cn/egrantindex/funcindex/prjsearch-list?locale=zh_CN'driver.get(url) #调用浏览器访问网站selector = Select(driver.find_element_by_id("f_year"))selector.select_by_value("2000")  #通过value属性值进行选择selector1 =Select(driver.find_element_by_id("f_grantCode"))selector1.select_by_value("218")  #通过value属性值进行选择driver.find_element_by_xpath('//*[@id="f_subjectCode"]').click()driver.find_element_by_xpath('//*[@id="f_subjectCode"]').send_keys("G0306") #定位time.sleep(0.3)driver.find_element_by_xpath('//*[@id="f_subjectCode"]').send_keys(Keys.ENTER) #回车

 以上就是本文介绍的全部内容,包括元素的定位、下拉框的处理、传入文本以及键盘动作等。接下来我们将会介绍如何攻克最后一道难关——验证码。如果大家在学习过程中,有任何问题,可以通过邮件和我们进行联系。

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存