Python自动化查询CNKI并获取查询结果
来源:互联网 发布:淘宝扒皮精灵家 编辑:程序博客网 时间:2024/05/20 03:39
最初是由GIS才认识Python,给朋友帮忙,写了个爬取CNKI的脚本,主要运用了selenium下的webdriver以及BeautifulSoup模块。运行下来,发现频繁的访问会导致验证码的出现,暂时没解决这个问题,有知道的大神请不吝赐教。
上代码:
#!/usr/bin/env python
# -*- coding:utf-8-*-__author__='Alex Gu'
__time__='20160121'
#解决提交后出现汉字转码问题用下面三行代码
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
#导入必要的模块
from selenium import webdriver
from time import sleep
from BeautifulSoup import BeautifulSoup
#定义提取单个网页中所需信息的函数
def Ex_CNKImesg(wy):
soup=BeautifulSoup(wy)
top_div=soup.find("div",{"id":"main"})
aa_=top_div.find("div",{"id":"content"})
bb_=aa_.find("div")
cc_=bb_.find('div',{"class":"summary pad10"})
dd_=cc_.find('div',{"class":"author summaryRight"})
ee_=dd_.findAll('p')[2]
ff_=ee_.findAll('a')
for gg in ff_:
dw=''.join(gg)
with open('dw.txt','a')as e:
e.write(dw.encode('utf-8')+',')
sleep(1)
e.close()
#提取页面信息,嵌套了单个网页提取函数
def Get_cnkimesg():
driver.switch_to_frame('iframeResult')
#通过class name找出所有链接,注意这里是find_elements,是因为结果不唯一,所以是复数形式!
links=driver.find_elements_by_class_name('fz14')
for link in links:
html=link.click()
#sleep(3)
break
all_handles=driver.window_handles#得到所有窗口句柄
for handle in all_handles:
if handle != now_handle:
driver.switch_to_window(handle)
html=driver.page_source
Ex_CNKImesg(html)
sleep(2)
driver.close()#提取完信息后就关闭该页面,释放内存
sleep(1)
else:
continue
#webdriver自动化打开网页,输入关键字查询
driver=webdriver.Firefox()
#最大化浏览器,optional
driver.maximize_window()
#打开网页地址,也可以打开html,具体方法以后再说先记着。。
driver.get("http://epub.cnki.net/kns/brief/result.aspx?dbprefix=scdb&action=scdbsearch&db_opt=SCDB")
#这个休眠是为了以防网络卡顿,网页还没打开就提交数据导致出错
sleep(2)
#id是html里面唯一的身份证,通过它找到要输入的空,输入词语,这个是下拉框
driver.find_element_by_id('allselectdblistbtn').click()
driver.find_element_by_id('clearSelectBtn').click()
sleep(1)
driver.find_element_by_id('allselectdblistbtn').click()
sleep(1)
all_options=driver.find_elements_by_tag_name("input")
for option in all_options:
if option.get_attribute('value') in ['CJFQ','CPFD','IPFD']:
option.click()
sleep(1)
m=driver.find_element_by_id("txt_1_sel")
m.find_element_by_xpath("//option[@value='TI']").click()#这一句很NB
#同上
driver.find_element_by_id("txt_1_value1").send_keys("RS")
#同上,点击查询按钮
driver.find_element_by_id("btnSearch").click()
#同样是等查询结果出来
sleep(2)
#将查询结果页面保存为“当前页”,方便后面寻找下一页句柄
now_handle = driver.current_window_handle
#查询结果是以frame的形式嵌入主站,所以要想对它操作,得切换到这里面来
Get_cnkimesg()
driver.switch_to_window(now_handle)
while True:
driver.switch_to_window(now_handle)
driver.switch_to_frame('iframeResult')
driver.find_element_by_link_text("下一页").click()
sleep(3)
now_handle = driver.current_window_handle
driver.switch_to_window(now_handle)
Get_cnkimesg()
sleep(2)
0 0
- Python自动化查询CNKI并获取查询结果
- python -- 获取 bing 查询结果
- 获取数据库查询结果
- hibernate hql 查询指定字段并获取结果集,多表查询结果集
- python mysql结果查询
- hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate hql 查询指定字段并获取结果集
- Hibernate异常--数据库所在服务器关闭引起的异常
- 工作中用到的js验证
- 网页滚动到底部自动加载数据
- sql 已知两点的经纬度,求距离
- 2015年工作报告与总结
- Python自动化查询CNKI并获取查询结果
- 手机相册的基本使用
- uva1398 - Meteor
- 理解Hadoop分布式文件系统HDFS(二)
- 【总结】深插浅出重拾Linux
- 为已有的web project项目加入maven支持,并使用myeclipse的插件.
- sp<> wp<>-Android中定义了两种智能指针强指针sp和弱指针wp
- RUST语法
- hdu3342 Legal or Not(简单拓扑排序判定)