在本例中首次使用了bs4库,bs4库进行数据解析,是Python特有的

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

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

  • 得益于项目的需求,需要将汉字转化为拼音,拼接进url中,长知识啦
  • 转化库有两个分别是xpinyin和pypinyin
  • 在本例中选择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——保留原始字符,一般不会用到)

此例介绍到此结束😊