从零开始有图:pycharm实现某小说网站资源的获取

news/2024/12/15 16:29:18/

运行环境

PyCharm 2023.2.1

python3.11


详细步骤

 1、安装requests,parsel和bs4库

点击终端

输入

pip install requests
pip install parsel
pip install bs4

2、使用pycharm编写python代码,确保在pycharm中可以正常运行代码

不同网站获取方法有一定差距,以笔趣阁网站之一为例,网址为

https://www.biqugen.net

搜索需要获取的书籍,进入如下界面,网址栏显示书籍编号(例如诛仙的书籍编号为1416)

点击进入目录第一章,进入如下界面,网址栏显示书籍起始章节的网页编号(例如序章的网页编号为1467648)

点击进入目录最后一章,进入如下界面,网址栏显示书籍结束章节的网页编号(例如序章的网页编号为1467950)

示例代码,可以通过在pycharm中运行该代码对该网站的内容进行获取

import requests
from bs4 import BeautifulSoup
from parsel import Selectordef get_novel_title(url):try:# 发送请求response = requests.get(url)# 检查请求是否成功response.raise_for_status()# 使用parsel提取小说名称title_selector = Selector(response.text)title = title_selector.css('h1::text').get()return titleexcept requests.exceptions.RequestException as e:print(f"Error: {e}")# 如果请求失败,返回Nonereturn Nonedef get_chapter_title_and_text(url):try:# 发送请求response = requests.get(url)# 检查请求是否成功response.raise_for_status()# 使用BeautifulSoup解析HTMLsoup = BeautifulSoup(response.text, 'html.parser')# 提取章节标题title = soup.title.string# 提取正文内容content = soup.find('div', {'id': 'content'})if content:# 处理文本中的<br>标签text_with_linebreaks = ''for element in content.stripped_strings:text_with_linebreaks += element + '\n'return title, text_with_linebreaksreturn None, Noneexcept requests.exceptions.RequestException as e:print(f"Error: {e}")# 如果请求失败,返回Nonereturn None, None# 获取用户输入,添加循环以允许重新输入
while True:book_id = input("请输入需要获取的书籍编号:")book_url = f'https://www.biqugen.net/book/{book_id}/'book_title = get_novel_title(book_url)if book_title:print(f"成功获取书籍信息:{book_title}")breakelse:print(f"未能获取书籍信息,请重新输入!")while True:try:start_chapter = int(input("请输入起始章节的网页编号:"))end_chapter = int(input("请输入结束章节的网页编号:"))output_file_path = input("请输入输出文件的位置:\n(例如C:\\Users\\Abit\\Desktop\\biqugen.txt): ")print("章节获取情况:")# 打开文件以写入模式with open(output_file_path, 'w', encoding='utf-8') as output_file:# 生成URL并遍历爬取每个网页的内容for chapter_number in range(start_chapter, end_chapter + 1):url = f'https://www.biqugen.net/book/{book_id}/{chapter_number}.html'title, result = get_chapter_title_and_text(url)# 将成功的章节名称和内容写入文件if result:output_file.write(f"{title}:\n{result}\n{'='*50}\n")print(f"{chapter_number}   {title}")else:print(f"{chapter_number}   未找到相关内容")breakexcept ValueError:print("输入的章节编号应为整数,请重新输入!")except Exception as e:print(f"发生错误: {e}")

运行结果如图

注意事项

如果出现以下问题

pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 

注意环境变量的配置,需要将你的python的安装目录下的Script文件夹的路径添加到Path中,比如C:\Program Files\Python311\Scripts


http://www.ppmy.cn/news/1275573.html

相关文章

IntelliJ IDE 插件开发 | (三)消息通知与事件监听

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听 前言 在前两篇文章中讲解了关于插件开发的基础知识&…

elasticsearch|大数据|低版本的elasticsearch集群的官方安全插件x-pack的详解

前言&#xff1a; elasticsearch集群说实话是比较好部署的&#xff0c;也就是从开箱即用这方面来说&#xff0c;是比较简单的&#xff0c;大体步骤就是首先处理好集群的环境&#xff0c;比如时间服务器&#xff0c;域名映射&#xff0c;内核层面的文件打开数这些小问题&#x…

《Kotlin核心编程》笔记:特设多态、运算符重载和扩展函数

多态的不同形式 Kotlin 的扩展函数其实只是多态的表现形式之一。 子类型多态 继承父类后&#xff0c;用子类实例使用父类的方法&#xff0c;例如&#xff1a; 然后我们就可以使用父类DatabaseHelper的所有方法。这种用子类型替换超类型实例的行为&#xff0c;就是我们通常说…

fastjson1.2.24 反序列化漏洞(CVE-2017-18349)分析

FastJson在< 1.2.24 版本中存在反序列化漏洞&#xff0c;主要原因FastJson支持的两个特性&#xff1a; fastjson反序列化时&#xff0c;JSON字符串中的type字段&#xff0c;用来表明指定反序列化的目标恶意对象类。fastjson反序列化时&#xff0c;字符串时会自动调用恶意对…

云架构俭约之道七法则(The Frugal Architect)

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 一、前言关于 Law 与 Rule 的区别 二、云架构俭约之道七法…

Unity CG内置文件

文档 内置文件 内置文件中的函数 常用宏 变量 CG内置文件位置和作用 位置 Unity安装目录 Editor/Data/CGIncludes中后缀为cginc的文件 作用 类似CG内置函数&#xff0c;提供常用的函数、结构体、变量等&#xff0c;提高开发效率 使用 CG模块中使用 #include “内置文件…

leetcode:641. 设计循环双端队列

设计循环双端队列 实现 MyCircularDeque 类: MyCircularDeque(int k) &#xff1a;构造函数,双端队列最大为 k 。 boolean insertFront()&#xff1a;将一个元素添加到双端队列头部。 如果操作成功返回 true &#xff0c;否则返回 false 。 boolean insertLast() &#xff1a;…

ESP32 Arduino学习篇 (一) 引脚和串口的基本使用

什么是arduino? 简单来讲arduino就是通过源代码控制开发板的信号输入输出从而实现对一些电子元件的控制&#xff0c;例如LED灯&#xff0c;蜂鸣器&#xff0c;按键 arduino程序 首先来讲arduino程序是基于C语言&#xff0c;而实现类似对于LED灯和蜂鸣器的简单控制只需简单C语言…