学习了基础的语法,然后网上看到有人分享利用python爬取小说,自己拷贝了代码尝试了一下。
1. 环境准备 安装 BeautifulSoup4 和 lxml
& C:/Python39/python.exe -m pip install --user BeautifulSoup4
& C:/Python39/python.exe -m pip install --user lxml
2. 重命名了下载后的文件名便于排序也防止有非法的字符出现无法创建文件,加了1秒的间隔
import os
import requests
import time
from bs4 import BeautifulSoup
声明请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
}
创建保存小说文本的文件夹
if not os.path.exists('./小说'):
os.mkdir('./小说/')
path = 'http://www.biquw.com/book/416/'
访问网站并获取页面数据
response = requests.get(path)
response.encoding = response.apparent_encoding
print(response.text)
'''
根据上图所示,数据是保存在a标签当中的。a的父标签为li,li的父标签为ul标签,ul标签之上为div标签。
所以如果想要获取整个页面的小说章节数据,那么需要先获取div标签。并且div标签中包含了class属性,
我们可以通过class属性获取指定的div标签,详情看代码~
'''
lxml: html解析库 将html代码转成python对象,python可以对html代码进行控制
soup = BeautifulSoup(response.text, 'lxml')
book_list = soup.find('div', class_='book_list').find_all('a')
soup对象获取批量数据后返回的是一个列表,我们可以对列表进行迭代提取
count = 1;
for book in book_list:
book_name = book.text
# 获取到列表数据之后,需要获取文章详情页的链接,链接在a标签的href属性中
book_url = book['href']
book_info_html = requests.get(path + book_url, headers=headers)
book_info_html.encoding = book_info_html.apparent_encoding
soup_part = BeautifulSoup(book_info_html.text, 'lxml')
info = soup_part.find('div', id='htmlContent')
name = str(count)
# print(info.text)
with open('./小说/' + name.zfill(4) + '.txt', 'a', encoding='utf-8') as f:
f.write(info.text)
print('{} 下载完成!'.format(book_name))
count += 1
time.sleep(1)
根据上图所示,数据是保存在a标签当中的。a的父标签为li,li的父标签为ul标签,ul标签之上为div标签。
所以如果想要获取整个页面的小说章节数据,那么需要先获取div标签。并且div标签中包含了class属性,
我们可以通过class属性获取指定的div标签,详情看代码~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。