Python爬虫实战1:小说网站

[by:豆青虫]
[00:00.000] 作曲 : standing egg-《voice》
[00:01.000] 作词 : 豆青虫
[00:03.278]原文:《博弈论》
[00:04.472]原曲:VOICE
[00:06.126]歌名:《半截的诗》
[00:07.817]演唱:夹子
[00:10.034]填词:豆青虫
[00:11.530]灵感:你是我,半截的诗,不许别人,改一个字。
[00:16.975]关了所有的灯置身黑暗
[00:22.921]爱意在汹涌膨胀 欲望在自由生长
[00:30.865]夜色之中描绘出你的模样
[00:36.633]过往与现实交杂 回放
[00:44.945]看灯火万盏 藏着温存热望
[00:51.740]迷恋你这一场 未完
[00:58.180]为你写下这半截的诗 不许别人 改一个字
[01:05.245]这是首 半截的诗 诗的开始 你的名字
[01:12.444]我同你 尚在场 路还长 可期望
[01:19.484]我为你 写这诗 去终站 无遗憾
[01:26.406]我共你
[01:33.801]我共你
[01:43.151]关了所有的灯置身黑暗
[01:49.470]爱意在汹涌膨胀 欲望在自由生长
[01:57.331]夜色之中描绘出你的模样
[02:03.474]过往与现实交叠 回放
[02:11.149]看灯火万盏 藏着温存热望
[02:18.431]迷恋你这一场 未完
[02:24.652]为你写下这半截的诗 不许别人 改一个字
[02:31.500]这是首 半截的诗 诗的开始 你的名字
[02:38.903]我同你 尚在场 路还长 可期望
[02:45.932]我为你 写这诗 去终站 无遗憾
[02:52.964]你是星辰下绝处的花 风雪艳阳 比不上
[03:02.444]对上你的目光 低声呢喃 说着情话
[03:08.496]这是首 半截的诗 诗的开始 你的名字
[03:15.666]这是首 半截的诗 诗的开始 你的名字
[03:22.870]爱意在汹涌膨胀 放任欲望自由生长
[03:29.979]我同你 尚在场 路还长 可期望
[03:37.370]我为你 写这诗 去终站 无遗憾
[03:44.109]我共你
[03:51.131]我共你
[03:58.520]

前言:

刚接触python看了点教程,试着爬取一下小说网站,写了半天bug幸好成功了。可以批量下载小说了,本地下载应该是1s一章的样子,这里还没学Scrapy框架,在 re 和 BeautifulSoup 中选择先学的的 BeautifulSoup ,代码如下一些关键的部分打上了注释。


# -*- coding: utf-8 -*-
#   @Time    : 2020/2/6 13:57
#   @Author  : 南国旧梦i
#   @FileName: py6(爬虫).py
#   @Software: PyCharm

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,'html.parser')#对内容进行处理,以便后续过滤
        bf_list=bf_content.find_all('span')#查找所有的span标签下的内容如果有class可以加上:class_ = 'showtxt'
        bf_content2=BeautifulSoup(str(bf_list),'html.parser')#再次进行过滤,因为我们需要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,'html.parser')
        bf_list=bf_content.find_all('p')
        val=''
        for value in bf_list:
            val+=('  '+value.text+'\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')

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

实际效果

南国旧梦i

南国旧梦i

出生于苏北小镇 习惯了一个人坐在电脑前 喜欢一个人听着音乐 梦想着一天有一趟说走就走的旅行·······目前过着大学生活,开始了程序人生。

2 Comments

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>