Расскажу вам о рептилиях вручную - Novel Crawl

сбор данных

Футляр для рептилий — те самые вещи династии Мин

С марта по начало апреля я долго читал роман - "Вещи в династии Мин". Я читал его почти целый месяц. Чем больше читаю, тем больше восхищаюсь. В этом прелесть романа. Роман.

История начинается с того, что Чжу Юаньчжан клянчил и выпрашивал еду. После непрерывных жестоких войн он победил различных противников и основал династию Мин. Позже Чжу Ди, король Яня, восстал, а затем Ци Цзигуан сражался против японских пиратов. самый известный глава кабинета появился в династии Мин.Министр Чжан Цзючжэн провел радикальные реформы, и династия Мин вступила в свой расцвет.Наконец, когда династия Цин вступила в таможню, династия Мин все же была побеждена Чунчжэнем.Если быть точным: ему было суждено потерпеть поражение. Как написано в тексте:

О, династия Мин, дыхание выдохлось

Книга рассказывает больше, чем просто историю.сила, надежда, боль, честность, одиночество, жестокость, зло, терпение, упорство, правда, верность... и все это есть в книге. В конце книги автор написал стихотворение, отрывок из которого здесь:

当蜘蛛网无情地查封了我的炉台 
当灰烬的余烟叹息着贫困的悲哀 
我依然固执地铺平失望的灰烬 
用美丽的雪花写下:相信未来 

当我的紫葡萄化为深秋的露水 
当我的鲜花依偎在别人的情怀 
我依然固执地用凝霜的枯藤 
在凄凉的大地上写下:相信未来

我要用手指那涌向天边的排浪 
我要用手掌那托住太阳的大海 
摇曳着曙光那枝温暖漂亮的笔杆 
用孩子的笔体写下:相信未来 

我之所以坚定地相信未来 
是我相信未来人们的眼睛 
她有拨开历史风尘的睫毛 
她有看透岁月篇章的瞳孔 
不管人们对于我们腐烂的皮肉 
那些迷途的惆怅、失败的苦痛 
是寄予感动的热泪、深切的同情 
还是给以轻蔑的微笑、辛辣的嘲讽 
我坚信人们对于我们的脊骨 
那无数次的探索、迷途、失败和成功 
一定会给予热情、客观、公正的评定

是的,我焦急地等待着他们的评定 
朋友,坚定地相信未来吧 
相信不屈不挠的努力 
相信战胜死亡的年轻 
相信未来、热爱生命

# by:当年明月

Ползучие романы

Источники данных

В этой статье описывается, как использовать Python для сканирования веб-сайта в поисках некоторых глав, посвященных этой книге.

Домашняя страница: https://www.kanunu8.com/

Пройдите по основной ссылке: https://www.kanunu8.com/files/chinese/201102/1777.html

парсинг контента

1. Название главы

2. Содержание главы

Возьмите первую главу в качестве примера: мы можем нажать «Глава 1 Детство», чтобы ввести текст первой главы.

Результаты сканирования

Взгляните на окончательные просканированные данные. существуетлокальный каталогПапка, созданная в разделе: «Вещи династии Мин», содержит содержимое 33 просмотренных нами глав, включая предисловие и введение.

Библиотеки, связанные со сканированием

Соответствующие библиотеки, используемые в этом сканере

from multiprocessing.dummy import Pool   # 伪多进程,加快爬取速度
import requests   # 发送请求,获取网页数据
import re  # 正则模块,解析数据
import os  # os模块处理文件和目录

Сканирование блок-схемы

Веб-анализ

Анализ правил сайта.

# 主页面:https://www.kanunu8.com/files/chinese/201102/1777.html

# 前言:https://www.kanunu8.com/files/chinese/201102/1777/40607.html
# 引子:https://www.kanunu8.com/files/chinese/201102/1777/40608.html
# 第一章:https://www.kanunu8.com/files/chinese/201102/1777/40609.html
# 第三十一章:https://www.kanunu8.com/files/chinese/201102/1777/40639.html

Была обнаружена закономерность: страницы каждой главы отличались собственным суффиксом URL. Посмотрите на исходный код веб-страницы, чтобы найти URL-адрес:

Суффикс URL-адреса каждой главы был найден выше

исходный код

Обычная запись не очень, и адрес нужно один раз нарезать. Удалите исходный код основной функции:

import requests 
import re
import os
from multiprocessing.dummy import Pool

start_url = 'https://www.kanunu8.com/files/chinese/201102/1777.html'

def get_source(url):
    """
    函数作用:获取网页内容,包含初始网页和每个章节的网页
    参数:
     URL地址,包含首页或者正文页地址
    返回值:
     网页源码内容
    """
    response = requests.get(url=url)
    result = response.content.decode('gbk')
    return result  # 返回初始网页源码

def get_toc(source_code):
    """
    函数说明:从初始网页中解析出来每个章节的URL地址,以待后续爬取每个章节的正文内容
    参数:
     初始页面的源码
    返回值:
     正文页的URL地址构成的列表:[url1,url2,......,url33]
    """
    toc_url_list = []
    toc_url = re.findall('.*?<td.*?><a href="(.*?)">.*?</a></td>',source_code,re.S)
    for url in toc_url:
        toc_url_list.append(start_url.split('1777')[0] + url)   # !!! 注意每个章节地址的构建
    return toc_url_list[1:34]   # 正则写的不好,还要切片一次


def get_article(article_code):
    """
    函数说明:传入每个章节的源码,获取章节名、正文内容
    参数:
     正文页的源码内容
    返回值:
     章节名称
     正文内容
    """
    chapter_name = re.search('color="#dc143c">(.*?)</font>',article_code,re.S).group(1)   # 获取匹配到的第一个内容
    article_text = re.search('<p>(.*?)</p>',article_code, re.S).group(1)  # p 标签之间的全部内容
    article_text = article_text.replace('<br />','')   # 替换文章中的空格符号
    return chapter_name, article_text
    
    
def save(chapter,article):
    """
    函数说明:根据每章名字和正文内容进行保存
    参数:
     章节名称
     该章节正文内容
    返回值:无
    """
    os.makedirs("明朝那些事儿",exist_ok=True)
    with open(os.path.join('明朝那些事儿', chapter + '.txt'), 'w', encoding='utf-8') as f:
        f.write(article)
        
        
def query_article(url):
    """
    函数说明:传入正文URL地址,获取到章节名和正文,并保存
    参数:
     正文页的URL地址
    返回值:无
    """
    article_code = get_source(url)  # 获取网页源码的函数
    chapter, article_text = get_article(article_code)  # 通过网页源码获取到章节名和正文内容
    save(chapter, article_text)  # 保存正文

обычная проблема среза

Исходный код домашней страницы возвращает результат контент-анализа:

url = 'https://www.kanunu8.com/files/chinese/201102/1777.html'
response = requests.get(url=url)
res = response.content.decode('gbk')

toc_url_list = []
toc_url = re.findall('.*?<td.*?><a href="(.*?)">.*?</a></td>',res,re.S)
print(toc_url)
for url in toc_url:
    toc_url_list.append(start_url.split('1777')[0] + url)   # !!! 注意每个章节地址的构建
    
toc_url_list

Действительный URL-адрес после нарезки: