学习了根底的语法,而后网上看到有人分享利用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_encodingsoup_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 += 1time.sleep(1)
依据上图所示,数据是保留在a标签当中的。a的父标签为li,li的父标签为ul标签,ul标签之上为div标签。
所以如果想要获取整个页面的小说章节数据,那么须要先获取div标签。并且div标签中蕴含了class属性,
咱们能够通过class属性获取指定的div标签,详情看代码~