python request 爬虫爬取起点中文网小说

2023-11-16

1.网页分析。进入https://www.qidian.com/,点击全部,进行翻页,你就会发现一个规律,

url=https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=0(1,2,3,……)

那么我么可以这样写

url = https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page='+str(start)+'


if __name__=='__main__':
    for i in range(1,6):
     gethtml(start=i*1)

2.获取小说列表页面源码。

import requests
from lxml import etree
import os
def gethtml(start):
    url = 'https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page='+str(start)+''
    html = requests.get(url)
    page = etree.HTML(html.text)
    titlelist = page.xpath('//div[@class="book-mid-info"]/h4/a/text()')
    titlelinklist = page.xpath('//div[@class="book-mid-info"]/h4/a/@href')
    for title,titlelink in zip(titlelist,titlelinklist):
        if os.path.exists(title) == False:  # 如果以该小说名为名字的文件夹不存在
            os.mkdir(title)  # 则新建以该小说名为名的文件夹
        get_son_html(title,titlelink)

 

3.获取小说页面源码。

def get_son_html(title,titlelink):
    html = requests.get('https:'+titlelink)
    page = etree.HTML(html.text)
    son_titlelist = page.xpath('//ul[@class="cf"]/li/a/text()')
    son_linklist = page.xpath('//ul[@class="cf"]/li/a/@href')
    for son_title,son_link in zip(son_titlelist,son_linklist):
        save(son_title,son_link,title)

4.获取小说内容也源码并保存。

def save(son_title,son_link,title):
    html = requests.get('https:'+son_link)
    page = etree.HTML(html.text)
    content = '\n'.join(page.xpath('//div[@class="read-content j_readContent"]/p/text()'))
    filename = title + '\\' +son_title + '.txt'  #小说名,先存在小说文件夹中,再以章节取名,存为.txt文件
    print('正在保存小说……',filename)
    open(filename,'w',encoding='utf-8').write(content)

5.完整代码。

import requests
from lxml import etree
import os
def gethtml(start):
    url = 'https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page='+str(start)+''
    html = requests.get(url)
    page = etree.HTML(html.text)
    titlelist = page.xpath('//div[@class="book-mid-info"]/h4/a/text()')
    titlelinklist = page.xpath('//div[@class="book-mid-info"]/h4/a/@href')
    for title,titlelink in zip(titlelist,titlelinklist):
        if os.path.exists(title) == False:  # 如果以该小说名为名字的文件夹不存在
            os.mkdir(title)  # 则新建以该小说名为名的文件夹
        get_son_html(title,titlelink)

def get_son_html(title,titlelink):
    html = requests.get('https:'+titlelink)
    page = etree.HTML(html.text)
    son_titlelist = page.xpath('//ul[@class="cf"]/li/a/text()')
    son_linklist = page.xpath('//ul[@class="cf"]/li/a/@href')
    for son_title,son_link in zip(son_titlelist,son_linklist):
        save(son_title,son_link,title)

def save(son_title,son_link,title):
    html = requests.get('https:'+son_link)
    page = etree.HTML(html.text)
    content = '\n'.join(page.xpath('//div[@class="read-content j_readContent"]/p/text()'))
    filename = title + '\\' +son_title + '.txt'  #小说名,先存在小说文件夹中,再以章节取名,存为.txt文件
    print('正在保存小说……',filename)
    open(filename,'w',encoding='utf-8').write(content)

if __name__=='__main__':
    for i in range(1,6): #爬取5页
     gethtml(start=i*1)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python request 爬虫爬取起点中文网小说 的相关文章

  • 递归单元测试发现

    我有一个带有目录 tests 的包 我在其中存储单元测试 我的包裹看起来像 LICENSE models init py README md requirements txt tc py tests db test employee py
  • 每月第 n 天运行 APScheduler 作业

    我正在寻找一个 APScheduler 触发器 它将在每月的第 n 天执行一项作业 例如 我想在每个月的第一个星期二运行一个作业 或者每个月的第一个和第三个周一 有没有人有一个触发器可以实现这一点 你可以almost使用 cron 调度程序
  • 使用组合时如何解决循环依赖?

    我遇到了如下所示的情况 其中每个类都需要另一个类 并且它创建了循环依赖关系 我在使用 ctypes 包装一些 C 代码时遇到了这种情况 已经有很多关于这个主题的帖子 但我发现它们没有帮助 我需要一些例子 Module A from B im
  • Python 中的密码子生成

    我有这段代码 用于将 DNA 字符串转换为密码子列表 然后将此列表转换为具有各自氨基酸的字符串 然而 当我运行代码并且 DNA 字符串以一对核苷酸 例如 CT 而不是三联体结尾时 代码不会生成氨基酸序列 正如您在输出中看到的 from co
  • 为什么 takewhile() 会跳过第一行?

    我有一个这样的文件 1 2 3 TAB 1 2 3 TAB 我想将 TAB 之间的行作为块读取 import itertools def block generator file with open file as lines for li
  • python:如何检查一行是否为空行

    试图弄清楚如何编写一个 if 循环来检查一行是否为空 该文件有许多字符串 其中之一是一个空行 用于与其他语句分隔开 不是 我认为是一个回车符后面跟着另一个回车符 new statement asdasdasd asdasdasdasd ne
  • 调整pandas read_sql_query NULL值处理?

    当我做 from sqlalchemy import create engine import pandas as pd engine create engine sqlite conn engine connect conn execut
  • 根据另一个非索引数组中的值从 numpy 数组中选择元素

    假设我有以下两个数组 a array 1 L 74 423088306605 5 H 128 05441039929008 2 L 68 0581377353869 0 H 88 15726964130869 4 L 97 45015825
  • 确定列的累积最大值

    我正在尝试以下代码 df pd DataFrame 23 52 36 49 52 61 75 82 97 12 columns A B df C np where df A gt df C shift df A df C shift pri
  • 解码来自 S60 设备的 WBXML SyncML 消息

    我正在尝试解码来自诺基亚 N95 的 WBXML 编码的 SyncML 消息 我的第一次尝试是使用 python pywbxml 模块 它包装了对 libwbxml 的调用 用此方法解码消息会得到许多 标签以及 标签内的一大块二进制文件 我
  • pyqt4窗口调整大小事件

    我正在使用 python3 和 pyqt4 我希望每次运行时都会运行一些代码QMainWindow已调整大小 我想要这样的东西 self window resized connect self resize but resized不是内置函
  • django PermissionRequiredMixin Permission_required 不起作用

    Views py class templateList PermissionRequiredMixin TemplateView permission required accounts template all def get self
  • 使用 python 更改目录

    我碰巧发现我无法从 python 代码中更改实际目录 我的测试程序如下 from os import system def sh script system bash c s script sh cd home sh pwd 的输出pwd
  • 如何将 MP3 音频文件读入 numpy 数组/将 numpy 数组保存到 MP3?

    有没有办法从 MP3 音频文件中读取 写入 MP3 音频文件numpy具有类似 API 的数组scipy io wavfile read https docs scipy org doc scipy 0 14 0 reference gen
  • 在keras自定义损失中使用层输出

    我正在 Keras 中开发自定义损失函数 我需要第一层输出 我怎样才能取回它 def custom loss y true y pred cross K mean K binary crossentropy y true y pred ax
  • 在 Jupyter 笔记本中使用 PySpark 读取 XML

    我正在尝试读取 XML 文件 df spark read format com databricks spark xml load path to my xml 并收到以下错误 java lang ClassNotFoundExceptio
  • Python Sqlite3 获取 Sqlite 连接路径

    给定一个 sqlite3 连接对象 如何检索 sqlite3 文件的文件路径 The Python 连接对象 http github com python cpython blob master Modules sqlite connect
  • Django ImageField 默认值

    模型 py class UserProfile models Model photo models ImageField upload to get upload file name storage OverwriteStorage def
  • pandas - 组合行的字符串

    我有一个像这样的数据框 id text 1 DM HTN Enlarged prostate 2 hypertensive and on regular treatment 2 LBP 3 DM HTN Enlarged prostate
  • python 根据日期创建目录结构

    我使用以下函数根据今天的日期创建目录 usr bin python import time datetime os today datetime date today todaystr today isoformat os mkdir to

随机推荐

  • Java 单例类中的线程安全

    Singleton 是最广泛使用的创建型设计模式之一 用于限制应用程序创建的对象 如果是在多线程环境中使用 那么单例类的线程安全性就非常重要 在现实应用程序中 数据库连接或企业信息系统 EIS 等资源是有限的 应明智地使用以避免任何资源紧缩
  • Fail2Ban 如何保护 Linux 服务器上的服务

    介绍 SSH 是连接云服务器的事实上的方法 它耐用且可扩展 随着新的加密标准的开发 它们可用于生成新的 SSH 密钥 确保核心协议保持安全 然而 没有任何协议或软件堆栈是完全万无一失的 SSH 在互联网上如此广泛的部署意味着它代表了一种非常
  • 如何在运行 Ubuntu 的 VPS 上安装和使用 Composer

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 如何在 Rocky Linux 9 上安装 Node.js

    介绍 Node js是用于服务器端编程的 JavaScript 运行时 它允许开发人员使用 JavaScript 创建可扩展的后端功能 这是许多人在基于浏览器的 Web 开发中已经熟悉的语言 在本指南中 您将了解在 Rocky Linux
  • Java 堆空间与堆栈 - Java 中的内存分配

    不久前我写了几篇关于Java 垃圾收集 and Java 是按值传递 之后我收到了很多电子邮件来解释Java堆空间 Java堆栈内存 Java中的内存分配它们之间有什么区别 您会在 Java Java EE 书籍和教程中看到很多对堆和堆栈内
  • Spring WebFlux - Spring 响应式编程

    Spring WebFlux是Spring 5中引入的新模块 Spring WebFlux是Spring框架中向反应式编程模型迈出的第一步 Spring 响应式编程 如果您是反应式编程模型的新手 那么我强烈建议您阅读以下文章来了解反应式编程
  • 如何在 Ubuntu 16.04 上设置 Apache 虚拟主机

    介绍 Apache Web 服务器是在互联网上提供 Web 内容的最流行的方式 它占互联网上所有活跃网站的一半以上 并且非常强大和灵活 Apache 将其功能和组件分解为可以独立定制和配置的单独单元 描述单个站点或域的基本单位称为virtu
  • Android 倒计时器示例

    在这个 android 倒数计时器示例中 我们将实现一个计时器对象来显示进度进度条 我们将在本教程中构建的应用程序是测验应用程序中的一个有用组件 其中以图形方式显示完成该级别的剩余时间 以增强用户体验 Android 倒计时器 Androi
  • 如何在 Ubuntu 18.04 上设置私有 Docker 注册表

    作者选择了阿帕奇软件基金会接受捐赠作为为捐款而写程序 介绍 Docker 注册表是一个管理存储和交付 Docker 容器镜像的应用程序 注册表集中容器映像并减少开发人员的构建时间 Docker 镜像通过虚拟化保证相同的运行时环境 但构建镜像
  • C 编程中的 fgets() 和 gets()

    介绍 我们都熟悉scanf 功能 它是适用于获取基本用户输入的主要功能 虽然scanf 在接受诸如以下输入时效果很好整数 字符 浮点数等等 在获取包含空格的字符串输入时 它肯定会落后 让我们看一个例子 include
  • Spring Bean 范围

    Spring Bean Scopes 允许我们更精细地控制 bean 实例的创建 有时我们希望将 bean 实例创建为单例 但在其他一些情况下 我们可能希望在每次请求时或在会话中创建一次 Spring Bean 范围 有五种类型春豆 sco
  • 如何在 Ubuntu 20.04 上安装和使用 Docker

    介绍 Docker是一个应用程序 可简化管理应用程序进程的过程容器 容器允许您在资源隔离的进程中运行应用程序 它们与虚拟机类似 但容器更便携 更资源友好 并且更依赖于主机操作系统 有关 Docker 容器的不同组件的详细介绍 请查看Dock
  • 针对Spring/Gradle启动失败的一些通用解决方案

    文章目录 0 前言 1 更改Gradle JVM的Java JDK 1 1 执行JUnit测试时 Gradle报错 0 前言 当你对Spring Gradle启动失败的错误信息一筹莫展时 不妨试试以下这些通用的解决方案 1 更改Gradle
  • SpringBoot在普通类获取Service或者DAO

    1手动创建工具类 package com lhw locktest util import org springframework beans BeansException import org springframework contex
  • 编程每日一题_C程序设计_零钱兑换

    描述 来源 MOOC C语言程序设计 浙江大学 翁老师 有改编 给定人民币整元数值 如1元 5元 10元 100元 将该币值的钱全部兑换为零钱 一角 两角 五角 且每次兑换每种面值的零钱均出现 请给出兑换方案 输出一种兑换方案 代码1 in
  • 设计模式---抽象工厂(AbstractFactory)模式

    1 名词解释 产品等级 指产品的类型一样 品牌不一样 例如空调是一种产品类型 美的空调与格力空调是不同的品牌 产品族 同一个品牌的不同产品 例如美的的空调 电饭锅 热水器属于同一产品族 这里引用一个图片来具体说明这两个名词解释 来自引用2
  • 超详细!腾讯NLP算法岗面经(已offer)

    作者 ZipZou 整理 NewBeeNLP 面试锦囊之面经分享系列 持续更新中 可以后台回复 面试 加入交流讨论组噢 写在前面 首先来段简单的自我介绍 2021届硕士 硕士期间未有实习经历 本科大三有过一次实习 小公司 可以忽略 本人投递
  • 龙芯2k1000la之固态硬盘重新分区

    当我们想为系统安装一些配置后发现我们想要安装到的磁盘分区满了时我们可以对固态硬盘进行重新分区 如下以up重装系统时 新系统压缩包太大无法在sda1解压为例 当我将 dev sda1挂载到disk文件夹并想要解压新系统时 提示该设备上已经没有
  • idea 注册码 在线生成方式

    已经有前辈搞了一个在线网站了 直接生成即可的 http idea iteblog com
  • python request 爬虫爬取起点中文网小说

    1 网页分析 进入https www qidian com 点击全部 进行翻页 你就会发现一个规律 url https www qidian com all orderId style 1 pageSize 20 siteid 1 pubf