python爬虫实战1:爬取小说

今天看了点教程,试了一下爬取某个小说网站的小说,终于测试成功,可以下载小说了,我这里的下载速度大概是每秒1章的样子,不过还是挺快的。这里我没有使用scrapy框架,而是直接使用的BeautifulSoup,这里我就只说一些关键的部分,直接上代码:

其他的我都在代码里面解释了,这里不在重复

# coding=utf-8
from bs4 import BeautifulSoup
import requests
#我这里直接定义了一个类,这样就可以方便的调用
class book(object):
    def __init__(self):
        self.target="http://www.qiushuge.net/zhongjidouluo/"#目录网址
        self.names=[]#存放章节名字
        self.urls=[]#存放url
        self.nums=0#章节数
    #获取url和章节数
    def getmessage(self):
        req=requests.get(url=self.target)#发出request请求,得到数据
        #把内容都编码,防止乱码问题出现
        req.encoding=('utf-8')
        content=req.text#获取内容
        bf_content=BeautifulSoup(content, "lxml")#对内容进行处理,以便后续过滤
        bf_list=bf_content.find_all('span')#查找所有的span标签下的内容如果有class可以加上:class_ = 'showtxt'
        bf_content2=BeautifulSoup(str(bf_list),"lxml")#再次进行过滤,因为我们需要span下的a标签(注意要先转换成str类型)
        bf_list2=bf_content2.find_all('a')#查找所有的a标签,找到所需要的数据
        for value in bf_list2:#遍历数据,把它放到列表中
            self.names.append(value.text)#添加数据 .text就是a标签的数据
            self.urls.append(value.get('href'))#.get可以查找标签里面的参数
        self.nums=len(self.names)#获取总的章节数
    #获取章节内容
    def gettext(self,target):
        req=requests.get(url=target)
        req.encoding = ('utf-8')
        content=req.text
        bf_content=BeautifulSoup(content,"lxml")
        bf_list=bf_content.find_all('p')
        val=''
        for value in bf_list:
            val+=('  '+value.text+'\n\n')#这里是循环遍历内容,然后不断把内容拼接起来
        return val#返回拼接的内容

    def write(self,name,path,text):
        with open(path,'a',encoding='utf-8') as f:#这里是把内容写到文本中
            f.write(name+'\n')
            f.write(text+'\n\n')

if __name__ == "__main__":
    d1=book()#先初始化类
    d1.getmessage()#执行类的函数
    print('正在下载《终极斗罗》...')
    for value in range(d1.nums):
        print('正在下载:%s',d1.names[value])
        d1.write(d1.names[value],'斗罗大陆.txt',d1.gettext(d1.urls[value]))#不断把每章的内容都写到文文中

实际效果

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00