【代码+数据】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 获取下载地址;

猜你也喜欢

发表评论

电子邮件地址不会被公开。