我小编这次又给大家带来了python爬虫案例,这次我们爬取小说内容,喜欢看小说的同学可以收藏起来了!!
和上篇一样我们先来分析一下项目,整理一下我们的爬虫思路,理清大体结构,看看我们需要哪些工具:
项目分析
由于小编也不经常看小说所以就随便找了一个小说网站https://www.555x.org/
我们首先来到网站的小说top榜查看一下网页源码
还是可以清楚的看到top榜里的小说全都在<li>标签中这就为我们的爬虫带来了很大的便利,只需要获取每个li标签里的内容就可以完成。
加下来我们找找文件在哪里下载,我们继续点击斗破苍穹来到下面的页面
我们继续点击进去看到了文件的下载链接,为了能够使爬虫的代码更加简单我们来看看这个链接和之前li标签里的小说链接有什么不同
下载链接:"https://www.555x.org/home/down/txt/id/19868"
小说页面链接:"https://www.555x.org/html/xuanhuan/txt19868.html"
可以看到他们有相同的一串编号,这样我们只需要获取每个小说的编号就能获得所有小说的下载链接了,下面我们来完善我们的代码。
代码编写
这个项目我们需要的库有requests库,BeautifulSoup库
经过上面的思路整理我们先建立起我们的爬虫框架:
我画了个流程图来让大家更好的理解我们的结构
好我们看看每个部分的代码是什么:
网页请求的代码几乎是通用的没次爬虫都可以原封不动的复制粘贴(这个代码无法解决反爬)
def getHTMLtext(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"
}
try:
r = requests.get(url=url, headers=headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
print('访问失败')
下面是获取页面每个小说的信息并构造下载链接
def parseHTMLtext(html,down_list):
soup=BeautifulSoup(html,'html.parser')
li_list=soup.find('div',class_='chu').find_all('li')
for li in li_list:
li_url=li.find('a').attrs['href']
li_url='https://www.555x.org/home/down/txt/id/'+li_url[-10:-5:1]
name=li.a.string
down_list.append([li_url,name])
pass
下面是文件保存的函数
def savetxt(down_list):
root='D:小说'
for down in down_list:
path=root+down[1]+'.txt'
txt=requests.get(down[0]).content
print(down[0])
with open(path,'wb') as f:
f.write(txt)
f.close()
pass
接下来是主函数
def main():
url='https://www.555x.org/top.html'
html=getHTMLtext(url)
down_list = []
parseHTMLtext(html,down_list)
savetxt(down_list)
print('下载成功')
pass
好这就是我们的代码框架我们来看看这个代码爬虫的小效果如何:
可以看到效果还是不错的!!
好了这就是这期的全部内容希望大家能够自己敲代码尝试一下,我也是python爬虫里的一只小白,代码可能并不完善但还是希望得到大家的支持,以后我也会推出更多的文章来一起学习!!
下期我们将给大家分享如何爬取网页图片,大家可以关注一下哟!!!
最后给大家献上完整代码想看立即看小说的可以直接复制粘贴:
import requests
from bs4 import BeautifulSoup
# 网页请求
def getHTMLtext(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"
}
try:
r = requests.get(url=url, headers=headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
print('访问失败')
# 网页内容解析
def parseHTMLtext(html,down_list):
soup=BeautifulSoup(html,'html.parser')
li_list=soup.find('div',class_='chu').find_all('li')
for li in li_list:
li_url=li.find('a').attrs['href']
li_url='https://www.555x.org/home/down/txt/id/'+li_url[-10:-5:1]
name=li.a.string
down_list.append([li_url,name])
pass
# 文件保存
def savetxt(down_list):
root='D:小说'
for down in down_list:
path=root+down[1]+'.txt'
txt=requests.get(down[0]).content
print(down[0])
with open(path,'wb') as f:
f.write(txt)
f.close()
pass
# 主函数
def main():
url='https://www.555x.org/top.html'
html=getHTMLtext(url)
down_list = []
parseHTMLtext(html,down_list)
savetxt(down_list)
print('下载成功')
pass
main()