学习了根底的语法,而后网上看到有人分享利用 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 标签,详情看代码~