1. 获取网页信息
- import requests #导入 requests 库
- '''
- 获取网页信息
- '''if __name__ =='__main__': #主函数入口
- target = 'https://www.xsbiquge.com/78_78513/108078.html'# 要爬取的目标地址
- req = requests.get(url=target) #进行 get 请求
- req.encoding='utf-8' #设置编码
- print(req.text) #打印输出
2. 引入 BeautifulSoup 对网页内容进行解析
- import requests #导入 requests 库
- from bs4 import BeautifulSoup #引入 BeautifulSoup 库
- '''
- 引入 BeautifulSoup 对网页内容进行解析
- 获取网页电子书文本信息
- '''if __name__ =='__main__': #主函数入口
- target = 'https://www.xsbiquge.com/78_78513/108078.html'# 要爬取的目标地址
- req = requests.get(url=target) #发起请求, 获取 HTML 信息
- req.encoding='utf-8' #设置编码
- HTML = req.text #将网页的 HTML 信息保存在 HTML 变量中
- bs = BeautifulSoup(HTML,'lxml') #使用 lxml 对网页信息进行解析
- texts = bs.find('div',id='content') #获取所有 < div id = "content"> 的内容
- print(texts) #打印输出
3. 切分数据, 去掉空格, 提取文字
- import requests #导入 requests 库
- from bs4 import BeautifulSoup #引入 BeautifulSoup 库
- '''
- 引入 BeautifulSoup 对网页内容进行解析
- 获取网页电子书文本信息
- 最后一句 texts.text 是提取所有文字, 然后再使用 strip 方法去掉回车,
- 最后使用 split 方法根据 \xa0 切分数据, 因为每一段的开头, 都有四个空格
- '''if __name__ =='__main__': #主函数入口
- target = 'https://www.xsbiquge.com/78_78513/108078.html'# 要爬取的目标地址
- req = requests.get(url=target) #发起请求, 获取 HTML 信息
- req.encoding='utf-8' #设置编码
- HTML = req.text #将网页的 HTML 信息保存在 HTML 变量中
- bs = BeautifulSoup(HTML,'lxml') #使用 lxml 对网页信息进行解析
- texts = bs.find('div',id='content') #获取所有 < div id = "content"> 的内容
- print(texts.text.strip().split('\xa0'*4)) #打印输出
4. 查看章节列表
- import requests #导入 requests 库
- from bs4 import BeautifulSoup #引入 BeautifulSoup 库
- '''
- 查看章节列表信息
- 引入 BeautifulSoup 对网页内容进行解析
- 获取网页电子书文本信息
- '''if __name__ =='__main__': #主函数入口
- target = 'https://www.xsbiquge.com/78_78513/'# 要爬取的目标地址,《元尊》的章节目录网址
- req = requests.get(url=target) #发起请求, 获取 HTML 信息
- req.encoding='utf-8' #设置编码
- HTML = req.text #将网页的 HTML 信息保存在 HTML 变量中
- bs = BeautifulSoup(HTML,'lxml') #使用 lxml 对网页信息进行解析
- chapters = bs.find('div',id='list') #获取所有 < div id = "list"> 的内容
- chapters = chapters.find_all('a') #找到 list 中的 a 标签中的内容
- for chapter in chapters:
- print(chapter) #打印章节列表
5. 获取章节目录和章节链接
- import requests #导入 requests 库
- from bs4 import BeautifulSoup #引入 BeautifulSoup 库
- '''
- 查看章节列表信息
- 引入 BeautifulSoup 对网页内容进行解析
- 获取网页电子书文本信息
- '''if __name__ =='__main__': #主函数入口
- server = 'https://www.xsbiquge.com'
- target = 'https://www.xsbiquge.com/78_78513/'# 要爬取的目标地址,《元尊》的章节目录网址
- req = requests.get(url=target) #发起请求, 获取 HTML 信息
- req.encoding='utf-8' #设置编码
- HTML = req.text #将网页的 HTML 信息保存在 HTML 变量中
- bs = BeautifulSoup(HTML,'lxml') #使用 lxml 对网页信息进行解析
- chapters = bs.find('div',id='list') #获取所有 < div id = "list"> 的内容
- chapters = chapters.find_all('a') #找到 list 中的 a 标签中的内容
- for chapter in chapters:
- url = chapter.get('href') #获取章节链接中的 href
- print("《"+chapter.string+"》") #打印章节名字
- print(server+url) #将电子书网站与获取到的章节连接进行拼接, 得到每一个章节的链接
6. 整合数据, 下载电子书文档
- import requests #导入 requests 库
- from bs4 import BeautifulSoup #引入 BeautifulSoup 库
- import time
- from tqdm import tqdm
- '''
- 查看章节列表信息
- 引入 BeautifulSoup 对网页内容进行解析
- 获取网页电子书文本信息
- '''
- def get_content(target):
- req = requests.get(url=target) # 发起请求, 获取 HTML 信息
- req.encoding = 'utf-8' # 设置编码
- HTML = req.text # 将网页的 HTML 信息保存在 HTML 变量中
- bf = BeautifulSoup(HTML, 'lxml') # 使用 lxml 对网页信息进行解析
- texts = bf.find('div', id='content') # 获取所有 < div id = "content"> 的内容
- content = texts.text.strip().split('\xa0' * 4)
- return content
- if __name__ == '__main__': #主函数入口
- server = 'https://www.xsbiquge.com' #电子书网站地址
- book_name = '《元尊》.txt'
- target = 'https://www.xsbiquge.com/78_78513/'# 要爬取的目标地址,《元尊》的章节目录网址
- req = requests.get(url=target) #发起请求, 获取 HTML 信息
- req.encoding='utf-8' #设置编码
- HTML = req.text #将网页的 HTML 信息保存在 HTML 变量中
- chapter_bs = BeautifulSoup(HTML,'lxml') #使用 lxml 对网页信息进行解析
- chapters = chapter_bs.find('div',id='list') #获取所有 < div id = "list"> 的内容
- chapters = chapters.find_all('a') #找到 list 中的 a 标签中的内容
- for chapter in tqdm(chapters):
- chapter_name = chapter.string #章节名字
- url = server + chapter.get('href') #获取章节链接中的 href
- content = get_content(url)
- with open(book_name,'a',encoding='utf-8') as f:
- f.write("《"+chapter_name+"》")
- f.write('\n')
- f.write('\n'.join(content))
- f.write('\n')
ps: 下载的时候可能会有点慢, 下载一本书大概十几分钟, 在以后学到新的方法会改善的
来源: https://www.cnblogs.com/ma1998/p/13291251.html