【代码+数据】Python采集《毛选5》并保存为xhtml文件

一、关于毛选5

《毛泽东选集》第5卷是毛泽东1949年以后著作的选集。这本书的编辑、出版用了近十年的时间,时间贯穿了整个文革。

由于特殊原因,这本书在1982年被停止发行,至今也未重新进行出版。

豆瓣上毛选5的评分

在豆瓣网站上,这本书获得了8.8的高分评价,可以说很是值得一看。

本篇文章,我们将会介绍从网站下采集毛选5的内容并保存为xhtml文件,方便后续将其制作为EPUB格式的电子书。

二、目标网站

机缘巧合,笔者在【读典籍】网(http://www.dudj.net) 发现了毛选5的电子版:

其内容分章节显示在不同的网页上:

目录页

每一章的内容都是独立且纯粹的:

可以说这个结构很适合我们使用Python编写代码对文章内容进行采集。

三、采集代码

根据网站网页的特点,我们首先梳理一下采集的思路:

  • 1、访问目录页获取目录所有章节的链接;
  • 2、遍历获取的所有章节链接并请求,获取每一章的内容;
  • 3、新建xhtml文件,将内容写入xhtml文件中;

接下来,开始我们的代码编写。

首先引入相关的模块:

# coding:utf-8 # 州的先生 import requests from bs4 import BeautifulSoup import time import random 

根据网站的具体情况,设置一个header字典作为请求头:

headers = {     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',     'Accept-Encoding':'gzip, deflate, sdch',     'Accept-Language':'zh-CN,zh;q=0.8',     'Cache-Control':'max-age=0',     'Connection':'keep-alive',     'Host':'www.dudj.net',     'If-Modified-Since':'Sat, 28 Oct 2017 14:18:10 GMT',     'If-None-Match':"13c16e2-739a-55c9c1335c87a",     'Referer':'http://www.dudj.net/hongsejingdian/53/',     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36', } 

请求目录页并解析每一章节的链接:

url = 'http://www.dudj.net/hongsejingdian/53/' wbdata = requests.get(url,headers=headers) soup = BeautifulSoup(wbdata.content,'lxml') # print(soup) contents = soup.select('table')[1] contents_link = contents.select('a') link_list = [] for link in contents_link:     link_name = link.get_text()     link_href = link.get('href')     # print(link_name,link_href)     link_list.append(link_href) 

link_list列表中就是所有章节的链接,我们对每一个链接再次进行请求,并解析响应内容保存到文本文件中:

curl = 'http://www.dudj.net'+link contentdata = requests.get(curl,headers=headers) csoup = BeautifulSoup(contentdata.content,'lxml') ctitle = csoup.select_one('div.atitle > h2').get_text() ccontent = csoup.select('div.zw > p') print(ctitle) c_no = ctitle.split('、')[0] c_name = ''.join(ctitle.split('、')[1:]) # print(c_no,c_name) if len(c_no) ==1:     c_no = '0' + c_no with open(c_no+c_name+'.xhtml','a+',encoding='utf-8') as files:     files.write('''<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <link href="../Styles/Font_Style.css" type="text/css" rel="stylesheet"/> <link href="../Styles/Main_Style.css" type="text/css" rel="stylesheet"/> </head> <body> <div style="text-align: right;"><img alt="logo" src="../Images/logo.png"/></div>     ''')     for c in ccontent:         files.writelines("<p>{}</p>".format(c.get_text()))     files.write('''         </body>         </html>     ''') print('写入完成') 

四、结果

最后代码运行完毕,当前目录下就会多出71个xhml文件:

打开其中一个文件,内容如下图所示:

这样,我们就采集并保存毛选5的内容成功了,下一步,我们将继续借助Python将这些xhtml文件制作为EPUB格式的电子书,敬请期待!

如需数据,请关注州的先生微信公众号并回复“0016”获取下载地址;
如需完整代码+数据,请访问 https://zmister.com/archives/692.html 获取下载地址;