python爬虫采集下载中国知网《出版来源导航》论文文献下载_PDF文档_数据采集知网爬虫论文Python3

时隔一年,很久没更新博客了。今天给大家带来一个python3采集中国知网 :出版来源导航

这个是网址是中国知网的,以下代码仅限于此URL(出版来源导航)采集,知网的其他网页路径采集不一定行,大家可以试试。

在发布代码前,大家先看下下载文件数据。

以上的数据基本来源于以下图片的导航中。

主要采集栏目搜索出自己想要的文档,然后进行采集下载本地中。

以下是完整代码,在使用代码请安装好对应的包,如果是pycharm 在设置 和 控制台终端 都可以安装。需要注意的是 自己需要替换 headers 内容。

我使用的环境是:

Windows 11 64位教育版

Pycharm 2023.2.3版本

python 3.6.8 

# encoding:utf-8
import json
import random
import time

import requests
from bs4 import BeautifulSoup
import csv
import os
import urllib.parse
"""

1、excel格式,只要标题加 HTML阅读连接
2、把内容写入到WORD或者直接下载PDF 
要求:全文设置关键字新农人,爬取标题、文章链接 。就这2个内容
"""

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Accept-Language': 'zh,zh-CN;q=0.9',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'Cookie':"请替换自己的COOKIE",
    'Referer': 'https://navi.cnki.net/',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-site',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
    'sec-ch-ua': '"Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}


def get_index(page,baseId,key_words):

    form_data = {
        'pcode': 'CCND',
        'baseId': baseId,
        'where': '%28QW%25%27%7B0%7D%27%29',
        # 'where': '%28QW%25%27%7B0%7D%27%29',
        'searchText': key_words,

        'condition': '',
        'orderby': 'FFD',
        'ordertype': 'DESC',
        'scope': '',
        'pageIndex': page,
        'pageSize': '20',
        'searchType': '全文',
    }
    headers = {
        'Accept': '*/*',
        # 'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        'Content-Length': '223',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Cookie': "请替换自己的COOKIE",
        'Host': 'navi.cnki.net',
        'Origin': 'https://navi.cnki.net',
        'Referer': 'https://navi.cnki.net/knavi/newspapers/NMRB/detail?uniplatform=NZKPT',
        'Sec-Ch-Ua': '"Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
        'Sec-Ch-Ua-Mobile': '?0',
        'Sec-Ch-Ua-Platform': '"Windows"',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',
        'X-Requested-With': 'XMLHttpRequest',
    }

    url = 'https://navi.cnki.net/knavi/newspapers/search/results'
    response = requests.post(url, headers=headers, data=form_data)
    html = BeautifulSoup(response.content, 'lxml')
    for tag in html(['thead']):
        tag.extract()

    try:
        content = html.find_all('table', class_="tableStyle")[0]
    except:
        print('采集完成!')
    else:
        content_tr = content.find_all('tr')
        for ct in content_tr:
            td = ct.find('td', class_="name")
            try:
                href = td.find('a')['href']
            except:
                href = ''
            try:
                name = td.find('a').text
            except:
                name = ''
            try:
                releaseDate = ct.find_all('td', align="center")
                releaseDate = [rd.text for rd in releaseDate if '-' in str(rd.text)][0]
            except:
                releaseDate = ""
            data = [name, releaseDate, href]
            saveCsv(baseIds, data)
            get_download_urls(href)

        try:
            pageCount = html.find('input', id="pageCount")['value']
        except:
            print('爬取完成!!!')
        else:
            page += 1
            print(f'正在爬取{page + 1}页')
            t = random.randint(1, 2)
            print(f'休息 {t} 秒后继续爬取')
            time.sleep(t)
            get_index(page,baseIds)


def saveCsv(filename, content):
    "保存数据为CSV文件 list 写入"
    fp = open(f'{filename}.csv', 'a+', newline='', encoding='utf-8-sig')
    csv_fp = csv.writer(fp)
    csv_fp.writerow(content)
    fp.close()
    print(f'正在写入:{content}')


def get_download_urls(url):

    response = requests.get(url, headers=headers)
    html = BeautifulSoup(response.content, 'lxml')
    title = str(html.find('h1').text).replace('/', '').replace('\\', '')
    dlpdf = html.find('li', class_="btn-dlpdf").find('a')['href']
    downfiles(dlpdf, title)

def downfiles(url, filename):
    session = requests.Session()
    content = session.get(url=url, headers=headers).content
    with open(f'{baseIds}/{filename}.pdf', 'wb') as f:
        f.write(content)
    print(filename, '下载成功')

def create_directory(directory):
    if not os.path.exists(directory):
        os.makedirs(directory)

def text_to_urlencode(chinese_str):
    # 中文字符串
    # chinese_str = '新农人'

    # 将中文字符串编码为UTF-8格式
    chinese_bytes = chinese_str.encode('utf-8')

    # 将字节串转换为URL编码格式
    url_encoded = urllib.parse.quote(chinese_bytes, safe='/:')
    return url_encoded

if __name__ == '__main__':

    # 采集网址:https://navi.cnki.net/knavi/newspapers/search?uniplatform=NZKPT
    # 再网址搜索 相关报纸的关键词信息

    data = ['标题', '日期', '内容链接']
    pa = 0
    baseIds = 'NMRB' #
    create_directory(baseIds)
    saveCsv(baseIds, data)
    key_words = "新农人" # 关键词

    key_words = text_to_urlencode(key_words)

    get_index(pa,baseIds,key_words)

声明:代码仅限于学习,学术研究使用,请勿用于非法用途,如有利用代码去违法犯罪,与作者无关。

不懂得请留言。不一定及时回复,但肯定会回复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/350515.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

部署Filebeat+Kafka+ELK 集群

目录 Kafka 概述 为什么需要消息队列(MQ) 使用消息队列的好处 消息队列的两种模式 Kafka 定义 Kafka 简介 Kafka 的特性 Kafka 系统架构 在zookeeper集群的基础上部署 kafka 集群 部署zookeeper集群 部署kafka集群 下载安装包 安装 Kafka Ka…

【自动化测试】读写64位操作系统的注册表

自动化测试经常需要修改注册表 很多系统的设置(比如:IE的设置)都是存在注册表中。 桌面应用程序的设置也是存在注册表中。 所以做自动化测试的时候,经常需要去修改注册表 Windows注册表简介 注册表编辑器在 C:\Windows\regedit…

Pandas应用-股票分析实战

股票时间序列 时间序列: 金融领域最重要的数据类型之一 股价、汇率为常见的时间序列数据 趋势分析: 主要分析时间序列在某一方向上持续运动 在量化交易领域,我们通过统计手段对投资品的收益率进行时间序列建模,以此来预测未来的收…

ECharts 中 Legend自定义可以使用svg标签

效果图: legend图例加载svg标签 在ECharts中,图例(legend)组件的formatter属性允许你自定义图例文本的格式。但是,formatter属性不支持直接加载SVG标签或Html。它接受一个字符串或者一个函数作为输入,并不能解析或渲染SVG。 如果…

白居易上班摸鱼闲不住,花非花,雾非雾

所有的成功都不是偶然的,一定有不为人知的付出。白居易,字乐天,号香山居士、醉吟先生。白居易小时候读书读到口舌生疮,练字练到手生茧子。 白居易的诗,通俗易懂,不识字的老妇人都听得懂。白居易写了大约30…

python小项目:口令保管箱

代码&#xff1a; #! python3 # python 编程-----口令保管箱passwords{emails: F7minlBDDuvMJuxESSKHFhTxFtjVB6,blog:VmALvQyKAxiVH5G8v01if1MLZF3sdt,luggage:12345,} import sys,pyperclip if len(sys.argv)<2:print(usage:python python3文件[accout]-copy accout pass…

KernelGPT: LLM for Kernel Fuzzing

KernelGPT: Enhanced Kernel Fuzzing via Large Language Models 1.Introduction2.Background2.1.Kernel and Device Drivers2.2.Kernel Fuzzing2.2.1.Syzkaller规约2.2.2.规约生成 3.Approach3.1.Driver Detection3.2.Specification Generation3.2.1.Command Value3.2.2.Argum…

【Java基础】聊聊你不知道的注解那些事

在实际的开发中&#xff0c;我们大量使用了注解&#xff0c;无论是spring、还是本身jdk提供的&#xff0c;注解都是围绕一个java程序员的开发生活&#xff0c;所以本篇主要介绍注解相关的概念、理论、实践。 定义注解 注解和异常非常相似&#xff0c;都可以自定义&#xff0c…

CDR绘图软件|安装教程来了(小白福利:有红包封面领取哦!)

前言 今天给小伙伴们讲讲&#xff1a;如何安装CDR软件。 如果未来的你想从事平面设计/广告行业&#xff0c;那应该就会接触到CDR这款软件。 CorelDRAW Graphics Suite是加拿大Corel公司的平面设计软件&#xff1b;该软件是Corel公司出品的矢量图形制作工具软件&#xff0c;这…

ShardingSphere之ShardingJDBC客户端分库分表上

目录 什么是ShardingSphere&#xff1f; 客户端分库分表与服务端分库分表 ShardingJDBC客户端分库分表 ShardingProxy服务端分库分表 ShardingSphere实现分库分表的核心概念 ShardingJDBC实战 什么是ShardingSphere&#xff1f; ShardingSphere是一款起源于当当网内部的应…

HubSpot数字化推广:突破传统,拓展创新的边界

在当今数字化时代&#xff0c;营销策略的创新成为企业取得竞争优势的关键。HubSpot作为数字化推广领域的领军者&#xff0c;不断开辟着创新营销之路&#xff0c;引领着数字化推广的新篇章。运营坛今天将深入探讨HubSpot是如何在数字化推广中实现创新&#xff0c;并为企业开启新…

如何在Vue项目中应用TypeScript?

文章目录 一、前言二、使用Componentcomputed、data、methodspropswatchemit 三 、总结 一、前言 与link类似 在VUE项目中应用typescript&#xff0c;我们需要引入一个库vue-property-decorator&#xff0c; 其是基于vue-class-component库而来&#xff0c;这个库vue官方推出…

体验华为云对话机器人服务 CBS

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、开通…

幻兽帕鲁服务器一键搭建脚本

前言 幻兽帕鲁刚上线就百万在线人数。官方服务器的又经常不稳定。所以这里给大家带来最快捷的搭建教程。废话不多说直接开始。 服务器配置要求 这里推荐腾讯云的轻量云服务器 测试环境&#xff1a; CPU &#xff1a; 2核 内存&#xff1a;4GB 系统&#xff1a;Debian 12 64…

nginx反向代理负载均衡

一&#xff0c;kali作为负载服务器 打开kali nginx服务&#xff0c;访问页面如下 使用docker拉取nginx&#xff0c;并做出端口映射 ┌──(root?kali)-[/etc/nginx] └─# docker pull nginx ┌──(root㉿kali)-[/etc/nginx] └─# docker run -p 11111:80 --name Jdr -d ng…

开源模型部署及使用

开源模型部署及使用 1.Langchain-Chatchat1.环境2.运行3.效果 2.facefusion1.环境2.运行3.效果 3.Aquila1.环境2.运行 1.Langchain-Chatchat Langchain-Chatchat这里面可以调用许多模型&#xff0c;我本地下载了chatglm3模型文件&#xff0c;所以就用这个模型。 1.环境 根据…

蓝桥杯(C++ 左移右移 买二增一 松散子序列 填充 有奖问答 更小的数 )

目录 左移右移 思路&#xff1a; 代码&#xff1a; 买二增一 思路&#xff1a; 代码&#xff1a; 松散子序列 思路&#xff1a; 代码&#xff1a; 填充 思路&#xff1a; 代码 &#xff1a; 有奖问答 思路&#xff1a; 代码&#xff1a; 更小的数 思路&#…

Java强训day4(选择题编程题)

选择题 接口中的方法是为了让重写编程题 题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a_b sc.nextInt();int b_c sc.nextInt();int ab sc.nextInt();int bc sc.nextInt();for(in…

面向社交网络语言隐写分析

论文&#xff1a;Linguistic Steganalysis Toward Social Network 发表在&#xff1a;IEEE Transactions on Information Forensics & Security是网络与信息安全领域的国际两大顶级期刊之一&#xff0c;中国计算机学会&#xff08;CCF&#xff09;推荐的A类期刊&#xff0c…

Git 删除已经 Push 到远程多余的文件

例如要删除 data/log 文件 1. 在当前项目下打开终端 2. 查看有哪些文件夹 dir 3. 预览将要删除的文件&#xff08;如果不清楚该目录下是否存在不应该删除的文件&#xff09; git rm -r -n --cached 文件/文件夹名称 加上 -n 这个参数&#xff0c;执行命令时&#xff0c;是不会…
最新文章