CNKI网页爬虫_cnki网站爬虫-程序员宅基地

技术标签: Python  

刚接触Python一周时间,写了一个CNKI爬虫,可爬取论文题目、作者、期刊名称、摘要等。

如果安装有mysql数据库,可将爬取记录保存至数据库中。

零基础纯小白一个,代码贴出来主要是为了交流学习。

# CNKI爬虫 -- 版本4.0 可实现单页面的搜索,显示题目、作者、期刊、摘要,可翻页;修复摘要显示不全的问题;可将数据存储进MySQL数据库
# 
# !usr/bin/env python3
# -*- coding: utf-8 -*-


import requests
import mysql.connector
from lxml import html


KeyWords = '人工智能'       # 搜索关键词
MaxPage = 1                 # 爬取的页面数目
URL = 'https://www.cn-ki.net/'

Num_Paper = 0

data = {
    'keyword': KeyWords,
    'db': 'SCDB'
}


def get_html(url, para_data):
    content = requests.get(url, params=para_data)
    return content

# 链接mysql数据库
# conn = mysql.connector.connect(user='root', password='root', database='db_mycnki')
# cur = conn.cursor()

content = get_html(URL+'search', data)
page_url = content.url

page_ii = 0
while page_ii < MaxPage:
    content = get_html(page_url, '')
    tree = html.fromstring(content.text)

    e1 = tree.xpath('//div[@class="mdui-col-xs-12 mdui-col-md-9 mdui-typo"]')
    for ei in e1:
        e2_title = ei.xpath('h3/a/text()')
        title = ''.join(e2_title)

        e2_author = ei.xpath('div[1]/span[1]/text()')
        author = ''.join(e2_author)
        e2_JnName = ei.xpath('div[1]/span[3]/text()')
        JnName = ''.join(e2_JnName)
        e2_JnVol = ei.xpath('div[1]/span[4]/text()')
        JnVol = ''.join(e2_JnVol)
        e2_JnType = ei.xpath('div[1]/span[5]/text()')
        JnType = ''.join(e2_JnType)

        e2_href = ei.xpath('h3/a/@href')
        href = ''.join(e2_href)
        if URL not in href:
            href = URL + href

        Jn_content = get_html(href, '')
        Jn_tree = html.fromstring(Jn_content.text)

        # 这是之前的代码
        # e2_abstract = Jn_tree.xpath('//div[@class="mdui-col-md-11 mdui-col-xs-9 mdui-text-color-black-text"]/p/text()')
        # 修改后的代码
        e2_abstract = Jn_tree.xpath('//div[@class="mdui-col-xs-12 mdui-text-color-black-text mdui-typo"]/p/text()')

        abstract = (''.join(e2_abstract)).strip()

        print('********************' + href)

        print('title: >>>>>>>>>>> %s' % title)
        print('href: ----------- %s' % href)
        print('author: >>>>>>>>>>> %s' % author)
        print('JnName: ---- %s ---- %s ---- %s' % (JnName, JnVol, JnType))
        print('>>>>>>>>>>> Abstract <<<<<<<<<<<')
        print('%s' % abstract)

        # 保存数据记录
        # cur.execute('insert into tb_mycnki (id, title, author, JnName, JnVol, JnType, Abstract, href) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)',
        #             [Num_Paper, title, author, JnName, JnVol, JnType, abstract, href])

        Num_Paper += 1

    page_ii += 1

    nextpg = tree.xpath('//div[@class="mdui-col-xs-9 TitleLeftCell mdui-valign"]/a[last()]')
    if nextpg.__len__() == 0:
        break
    nextpg_text = nextpg[0].text
    if nextpg_text == '下一页':
        page_url = nextpg[0].attrib['href']
    else:
        break

    if URL not in page_url:
        page_url = URL + page_url

print('****************************************************************************')
print('>>>>>>>>>>>>>>>>  数据导出结束,共导出 %d 篇文献!<<<<<<<<<<<<<<<<<<<<<<<<<<' % Num_Paper)

# 关闭数据库
# conn.commit()
# cur.close()


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huahua19891221/article/details/79190177

智能推荐

成功解决object at 0x000002463192BAC8-程序员宅基地

文章浏览阅读2.8w次,点赞8次,收藏20次。成功解决object at 0x000002463192BAC8目录解决问题解决思路解决方法解决问题Q1、 <pymssql.Cursor object at 0x000002463192BAC8>|object at 0x00000135BF6FBAC8>Q2、有的错误是因为没有加小括号print(resu..._object at

微信小程序之周边乡村游系统源码+论文+答辩PPT+开题报告_基于微信小程序的家乡文化系统-程序员宅基地

文章浏览阅读130次。首页、个人中心、游客管理、景点信息管理、景点美食管理、美食类型管理、景点攻略管理、特产信息管理、特产类型管理、留言板管理、系统管理、订单管理等功能。开发软件:微信开发者工具、后端使用IDEA/Eclipse/MyEclipse。首页、景点信息、景点美食、特产信息、我的等详细的了解及统计分析。微信小程序端:Vue+uni-app。后端:Java+SSM。_基于微信小程序的家乡文化系统

宏基因组,分箱时报错_badly formed genome unclippedloc: contig chr1 give-程序员宅基地

文章浏览阅读468次。宏基因组分箱时遇到错误,有什么解决办法吗?运行命令:metawrap binning -o INITIAL_BINNING -t 8 -a assebbly/final_assembly.fasta --metabat2 --maxbin2 --concoct clean_reads/ERR*fastq谢谢各位大神,请指教。_badly formed genome unclippedloc: contig chr1 given as location, but this co

Python反爬JS逆向解析(七)-----某不知名网站js加密cookie反爬_execjs._exceptions.programerror: referenceerror: d-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏16次。采集前建议:找好代理IP,别对该网站发起攻击性访问,否则爬虫用的好,监狱进的早1.网站:点此直达该不知名网站 2.正常请求网站:拿到网址,查看完基本的信息后,应该就是用代码对网站发起请求了。# -*- coding: UTF-8 ..._execjs._exceptions.programerror: referenceerror: document is not defined

数据结构与算法之树结构基础-程序员宅基地

文章浏览阅读527次,点赞12次,收藏18次。大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。麻烦帮忙转发一下这篇文章+关注我《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!图片转存中…(img-JuX94DNd-1713713136245)]

AutoSAR_BSW高阶 126. AUTOSAR E2E通信保护配置实践:E2EPW配置TX发送的Signal Group(E2E Profile 1)_e2e profile1代码-程序员宅基地

文章浏览阅读165次。E2E通信保护是一种机制,用于确保从一个通信节点到另一个通信节点的数据的完整性和可靠性。在车辆电子系统中,这种机制至关重要,因为数据通信可能涉及到关键的安全和功能相关数据,如制动系统、引擎控制、传感器数据等。E2E通信保护通过使用不同的校验方法和保护级别,确保数据在传输过程中不受损坏或篡改。E2E Profile 1是E2E通信保护的一种配置,它提供了基本的安全性和完整性保护。在E2E Profile 1中,数据包含了CRC(循环冗余校验)校验码,以检测数据的完整性。_e2e profile1代码

随便推点

使用国内的软件源解决升级至最新版Linux Mint una 20.3缓慢或升级失败的问题_linux mint20.3 una设置源-程序员宅基地

文章浏览阅读2.5k次。最近几天Linux Mint 官方发布了最新版的una 20.3,操作系统的更新管理器也提示进行升级,但是点击菜单项“ 编辑--升级到 linuxmint20.3” 后升级的镜像源就由本地又变成了国外源了,主要的镜像源(una)变成了位于美国的"http://packages.linuxmint.com",而基础的Ubuntu软件源(focal)变成位于英国的"http://archive.ubuntu.com/ubuntu/";在执行更新命令进入下载阶段后,位于英国的Ubuntu源还基本可以下载,只是比国_linux mint20.3 una设置源

unity 文字滚动显示_Unity 为UGUI Text添加滑动条-程序员宅基地

文章浏览阅读814次。给Text创建滑动条还是蛮简单的。一、首先创建一个Scroll View,然后删除横向滑动image.png二、修改竖向滑动条设置image.png三、为Content添加Textimage.png四、再为Content添加ContentSizeFitterimage.png五、选择适配方向image.png六、完成image.png完成了以上步骤就算是实现了功能,可以实现Text的拖拽了,下面我..._unity scroll view text

Qt tabwidget 标签页设置tabbar标题,tabwidget设置透明色_tabwidget设置tab头的颜色-程序员宅基地

文章浏览阅读6.8k次,点赞6次,收藏28次。1.使用paintevent事件对窗口进行背景设置,背景如下图所示。2.将tabwidget拖动进ui窗口中,编译运行效果如下,tabwidget会将背景图给遮挡,需要将tabwidget设置为透明色。使用语句:ui->tabWidget->setStyleSheet("QTabWidget:pane {border-top:0px solid #e8f3f9;background: transparent; }");,之后的显示效果如下,紧接着有着标签页tabbar的字体和样式更改_tabwidget设置tab头的颜色

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol_linking... libcd.lib(wincrt0.obj) : error lnk2001:-程序员宅基地

文章浏览阅读1.4w次,点赞11次,收藏20次。学习VC++时经常会遇到链接错误LNK2001,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。产生LNK2001错误的原因:一个是由于编码错误导致的LNK2001,在这不想详细说.另一个由于编译和链接的设置而造成的LNK2001.最经常发生的是:"LIBCD.lib(wincrt0.obj) : error LNK2001: u_linking... libcd.lib(wincrt0.obj) : error lnk2001: unresolved external symbo

vue v-for 传值_v-for 可以调用方法传参数吗-程序员宅基地

文章浏览阅读6.5k次。学习vue框架的第两天,今天主要研究v-for的使用v-for的一些使用技巧:https://blog.csdn.net/qq_32953185/article/details/83066871之前能够获取数值的值,但是不知道如何从中获取一条值。突然受到启发使用参数,然后传值,具体要求:1:显示上面书籍列表中的所有书籍名称。点击书籍名称显示书籍的具体信息(书名和价格)。鼠..._v-for 可以调用方法传参数吗

360私有云平台Elasticsearch服务初探-程序员宅基地

文章浏览阅读1.8k次。ElasticsearchElasticsearch 是一款基于Apache Lucene框架构建的开源的、分布式的、可扩展的、(准)实时的文档存储和搜索引擎。在提供搜索服务以及日志分析方面已经日趋成熟,尤其是在Elasticsearch 5.x发布之后,在规范性、功能、性能等方面都有了极大的改进,并且进入了迅速迭代的过程,版本发布之快令人乍舌。360Hulk云平台,作为业界首屈一指的私有云平台,_elasticsearch 云平台