中文起点网小说爬虫

import os
import requests
from pyquery import PyQuery as pq
import re

headers = {
    "referer": "https://read.qidian.com/chapter/0aFVD3Gm6QUz2wAI5wVpbA2/MMVtN_lV-wDM5j8_3RRvhw2",
    "User-Agent": "MMozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
    "Host": "book.qidian.com",
}

headers1 = {
    "referer": "https://read.qidian.com/chapter/0aFVD3Gm6QUz2wAI5wVpbA2/MMVtN_lV-wDM5j8_3RRvhw2",
    "User-Agent": "MMozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
    "Host": "read.qidian.com",
}

save_path = os.getcwd()


def create_book_dir_name(full_dir_name):
    if not os.path.exists(full_dir_name):
        os.makedirs(full_dir_name)


def write_text(save_path, dir_name, word_content_wrap):
    with open(save_path + "\\" + dir_name + "\\" + dir_name + ".txt", "w") as f:
        f.write(word_content_wrap)
        print(word_content_wrap)
        f.write("\n")


if __name__ == "__main__":

    book_url = "https://book.qidian.com"
    book_url_get = requests.get("https://book.qidian.com/info/1021338796#Catalog", headers=headers)
    book_url_get.encoding = "utf-8"
    book_url_get.close()
    show_book_url_get_doc = pq(book_url_get.text)
    # 章节链接还有名字   .volume .cf li a
    book_page_href = show_book_url_get_doc(".volume .cf li a")
    book_page_name = show_book_url_get_doc(".volume .cf li a").text().split(" ")
    for page_i, page_name, every_i in zip(book_page_name[0:36:2], book_page_name[1:37:2], book_page_href):
        dir_name = page_i + "_" + page_name
        full_dir_name = os.path.join(save_path, dir_name)
        print(dir_name)
        create_book_dir_name(full_dir_name)
        i_href = every_i.get("href")
        full_https_url = "https:" + i_href
        full_https_url_get = requests.get(full_https_url, headers=headers1)
        full_https_url_get.encoding = "utf-8"
        full_https_url_get_doc = pq(full_https_url_get.text)
        full_https_url_get.close()
        word_content_wrap = full_https_url_get_doc(".read-content.j_readContent p").text()
        write_text(save_path, dir_name, word_content_wrap)

### 使用 Scrapy 实现起点中文网的小说数据抓取 要通过 Scrapy 抓取起点中文网的小说数据,可以按照以下方法设计并实现爬虫程序。以下是具体的技术细节: #### 1. 安装依赖库 在开始之前,需安装 Scrapy 库以及可能需要用到的其他工具包(如 `pandas` 或数据库驱动)。可以通过 pip 命令完成安装: ```bash pip install scrapy pandas mysql-connector-python ``` #### 2. 创建 Scrapy 项目结构 运行命令创建一个新的 Scrapy 项目: ```bash scrapy startproject qidian_spider cd qidian_spider ``` #### 3. 配置 Spider 文件 编辑项目的 spider 脚本文件,在其中定义目标 URL 和解析逻辑。 ##### (a) 设置起始请求 在 Spider 的初始化函数中指定目标页面地址。例如,“完本榜”的链接可能是类似于这样的形式[^1]: ```python import scrapy class QidianSpider(scrapy.Spider): name = 'qidian' allowed_domains = ['book.qidian.com'] start_urls = ['https://www.qidian.com/rank/final/'] def parse(self, response): novels = response.css('div.book-mid-info') # 提取小说列表区域 for novel in novels: item = {} item['name'] = novel.css('h4 a::text').get() # 小说名称 item['author'] = novel.css('p.author a.name::text').get() # 作者名 item['category'] = novel.css('p.author a.go-sub-type::text').get().strip() # 类别 yield item ``` ##### (b) 数据存储至 CSV 文件 为了将提取的数据保存成 CSV 格式,可以在 settings.py 中配置 FEEDS 参数: ```python FEEDS = { 'novels.csv': {'format': 'csv', 'encoding': 'utf8'} } ``` ##### (c) 存储到数据库 如果希望把数据写入 MySQL 数据库,则需要扩展管道功能来处理输出项[^2]。下面是一个简单的例子展示如何连接数据库并将结果插入表单: ```python import mysql.connector class SaveToDatabasePipeline(object): def __init__(self): self.conn = mysql.connector.connect( host='localhost', user='root', password='', database='books' ) self.cursor = self.conn.cursor() def process_item(self, item, spider): sql = """INSERT INTO books(title, author, category) VALUES (%s,%s,%s);""" values = ( item["name"], item["author"], item["category"] ) try: self.cursor.execute(sql,values) self.conn.commit() except Exception as e: print(e) self.conn.rollback() return item def close_spider(self,spider): self.cursor.close() self.conn.close() ``` 最后记得激活此 pipeline 并调整 setting 如下所示: ```python ITEM_PIPELINES = { 'your_project_name.pipelines.SaveToDatabasePipeline': 300, } ``` 以上就是基于 Scrapy 构建的一个基本框架用于获取起点中文网上有关书籍的信息,并支持多种方式储存这些资料的方法介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_38185649

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值