首先先选择一个小说网站,随便选择一章内容,url为http://www.biqukan.com/3_3039/1351331.html
点击鼠标右键,选择审查元素,查看网页结构
查看之后就可以用BeautifulSoup来提取网页中的内容了
import requests
from bs4 import BeautifulSoup
import re
headers = {
'User-Agent':'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)',}
url = 'http://www.biqukan.com/3_3039/1351331.html'
html = requests.get(url,headers=headers)
# 获取到网页的文本格式
html = html.text
soup = BeautifulSoup(html,'lxml')
# 选择器得到的是一个列表,只有一个元素,要选取第一个
zhangjie = soup.select('div.content h1')[0]
# 得到章节的文本内容
zhangjie = zhangjie.text
print(zhangjie)
# 查找属性是id为'content'且class为'showtxt'的标签
text = soup.find(id='content', class_='showtxt')
# 得到文本内容
text=text.text
# 将得到的文本存入文件中
with open('xiaoshuo.txt','w',encoding='utf-8') as f:
f.write(zhangjie)
f.write(text)
运行程序,得到一下结果
然后得到一个名为xiaoshuo.txt的文件,点开该文件就可看到内容,格式有点不美观,但能看就行,意思到了就可以了
这只是爬取了一章网页的内容,接下来我就要将本小说爬取下来了
url=http://www.biqukan.com/3_3039/
鼠标点击右键查看
我们只需爬取正文卷就好了,选取dd标签的时候如果使用find_all的话有点麻烦,本人又是个最不喜欢麻烦的人,直接简单粗暴就用下标截取,能达到目的就行了,虽然代码健壮性差,但能出结果就行。
import requests
from bs4 import BeautifulSoup
# 解析url
def main(url):
html = requests.get(url, headers=headers)
html = html.text
soup = BeautifulSoup(html, 'lxml')
# 得到神墓正文的dd标签,跳过最新章节
nr = soup.select('div.listmain dd')[12:]
# 分别读取其中的dd标签
for i in nr:
# 分别取出每个标签的内容和链接
title = i.text
url = i.a.get('href')
# 得到的url不完整,所以做进一步的拼接
url = 'http://www.biqukan.com' + url
# 调用解析网页内容的小说正文
next_page(title,url)
# 解析得到网页的正文
def next_page(title,url):
txt = requests.get(url)
html = txt.text
# 进一步解析每一张url的网页内容
soup = BeautifulSoup(html, 'lxml')
# 查找属性是id为'content'且class为'showtxt'的标签
text = soup.find(id='content', class_='showtxt')
# 获取到小说正文
text = text.text
# 下载该章节小说
downlode(title,text,url)
# 下载小说
def downlode(title,text,url):
with open('shengmu.txt', 'a+', encoding='utf-8') as f:
f.write(title)
f.write(text+'\n')
print('{} 下载完成 链接地址为 {}'.format(title,url))
if __name__ == '__main__':
headers = {
'User-Agent': 'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)', }
url = 'http://www.biqukan.com/3_3039/'
main(url)
运行代码,就会看到逐步在下载小说了
然后看一下我们保存小说的文件
然后就看到我们的数据了,有兴趣的可以把格式装换下,这样看起来就美观多了