zl程序教程

您现在的位置是:首页 >  其它

当前栏目

解析诗词名句网部分(史书、经文除外)电子书

解析 部分 电子书
2023-09-14 09:16:29 时间
在本例中首次使用了bs4库,bs4库进行数据解析,是Python特有的

bs4需要先实例化BeautifulSoup对象才可使用,且需要配置lxml环境

BeautifulSoup(page_text, ‘lxml’)
参数1为请求到的页面文本,这里使用.text
参数2一般为’lxml’

  • 得益于项目的需求,需要将汉字转化为拼音,拼接进url中,长知识啦
  • 转化库有两个分别是xpinyinpypinyin
  • 在本例中选择pypinyin库,来将汉字转化为拼音
  • 原因在于pypinyin库比xpinyin库更加强大
解释器版本3.8
#!/usr/bin/env python
# encoding: utf-8

"""
@file: 解析诗词名句网电子书.py
@time: 2020/2/24 13:02
"""
import pypinyin
import requests
from bs4 import BeautifulSoup


# 汉字转拼英
def pinyin(word):
    py = ''
    for i in pypinyin.pinyin(word, style=pypinyin.NORMAL, heteronym=True):
        py += ''.join(i)
    return py


def get_book():
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/80.0.3987.116 Safari/537.36'
    }
    word = input('请输入要下载的书名:')
    url_p = 'http://www.shicimingju.com/book/%s.html'
    url = format(url_p % pinyin(word=word))
    page_text = requests.get(url=url, headers=headers).text
    # 在首页中解析出章节的标题和详情页的url
    # 实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中
    soup = BeautifulSoup(page_text, 'lxml')
    # 解析章节标题和详情页的url
    li_list = soup.select('.book-mulu > ul > li')
    # 设置文件名称
    file_name = './' + word + '.txt'
    fp = open(file_name, 'w', encoding='utf-8')
    for li in li_list:
        title = li.a.string
        detail_url = 'http://www.shicimingju.com' + li.a['href']
        # 对详情页发起请求,解析出章节内容
        detail_page_text = requests.get(url=detail_url, headers=headers).text
        # 解析出详情页中相关的章节内容
        detail_soup = BeautifulSoup(detail_page_text, 'lxml')
        div_tag = detail_soup.find('div', class_='chapter_content')
        # 解析到了章节的内容
        content = div_tag.text
        fp.write(title + ':' + content + '\n')
        print(title + '爬取成功!!')


if __name__ == '__main__':
    get_book()

在次对pypinyin库的用法进行简单的概述:

环境的配置:pip install pypinyin
既然是库那就要引入啦:import pypinyin
本例中的方法 pypinyin.pinyin() 方法

该方法的第一个参数必传参数(汉字字符串)
其它参数:style=Style.TONE(默认,返回带声调的拼音字符串)
                  style=pypinyin.NORMAL (返回不带声调拼音字符串)
                  heteronym=True(是否开启多音字,True为开启,默认为False)
                  strict: (是否严格遵照《汉语拼音方案》来处理声母和韵母)
                  errors=‘default’(处理没有拼音的字符,默认为default——保留原始字符,一般不会用到)

此例介绍到此结束😊