美文网首页
简单爬虫——抓取诛仙小说

简单爬虫——抓取诛仙小说

作者: 南太湖小蚂蚁 | 来源:发表于2022-11-01 15:21 被阅读0次

    最近腾讯在播放我最喜欢的玄幻小说之一《诛仙》的动漫,我也想重读一下诛仙,所以想把诛仙下载下来,现在微信读书平台很不错,不过上面的热门小说很多要收费,我就想着自己抓下来读一下。说干就干,我百度了一下,找到了一个网站可以在线阅读诛仙,好了,这个就是我的目标了。
    https://www.93xscc.com/zhuxian/

    诛仙
    由于每一章都有一个单独的链接,所以我首先要获取每一章链接和标题,打开F12查看网页源代码,可以很清晰的看到源代码,
    目录
    OK,那下面我只要把这些链接抓下来存在一个列表中,循环遍历这个列表,去获取文章内容就可以了。
    我们发现每章的链接和标题都是在<ul>下面的<li>节点中的,那我首先要获取到这个大块的内容,我通过正则表达式
    '全文阅读.?<ul>(.?)</ul>'
    获取到“全文阅读”之后的<ul>块中的内容,也就是那一堆的<li>节点,之后通过正则表达式
    <a href="(.?)" title="(.?)">
    获取到每一章的链接地址和标题。代码如下:
    import re
    
    url_home = 'https://www.93xscc.com/zhuxian/'
    page = requests.get(url_home).content.decode()
    
    # 获取目录
    mulu = re.search('全文阅读.*?<ul>(.*?)</ul>', page, re.S).group(1)
    link_list = re.findall('<a href="(.*?)" title="(.*?)">', mulu, re.S)
    link_list
    
    每一章的链接和标题

    可以看到,获取了每一章的链接信息和标题。
    接下来,我要根据这些链接去获取文章的正文。打开第一章的正文链接,查看正文的源代码:


    正文页面
    正文源代码

    可以看到,每一章开头都有一句话:“如果被/浏/览/器/强/制进入它们的阅/读/模/式了,阅读体/验极/差请退出转/码阅读.”,那我就用这句话来作为获取内容的起始标志,结尾节点是一个</div>

    for link in link_list:
        url = 'https://www.93xscc.com'+link[0]
        content = requests.get(url).content.decode()
        text = re.search('码阅读.*?<p>(.*?)</div>', content, re.S).group(1)
        #print(text.replace("</p><p>","\n"))
        text = text.replace("</p><p>","\n")
        os.makedirs('诛仙', exist_ok=True)
        #如果没有“诛仙”文件夹,就创建一个,如果有,则什么都不做
        with open(os.path.join('诛仙','诛仙.txt'),'a',encoding='utf-8') as f:
            f.write(link[1]+"\n"+text+"\n\n")
    

    所以,我们可以构建一个正则表达式来获取正文的内容
    码阅读.?<p>(.?)</div>
    这样获取的正文有个问题,文章中的段落都是通过HTML的<p>来分割的,所以需要把文章中的连续的</p><p>手动替换为换行符\n,然后把最后一章的</p>替换为空白字符串,以及尾声中的<p>也替换为空白字符串。这样,我就获取到每一章的正文。

    正文

    最后,我只需要把这些结果拼接起来就行了。我创建一个《诛仙》的word文档,并把每一章的内容添加到其中,这里我采用python操作word的第三方库python-docx包,把每一章的标题作为word的标题格式,设置为3号标题,小说名设置为0号标题。

    import docx
    import os
    
    doc = docx.Document()
    doc.add_heading('诛仙',0)
    for link in link_list:
        url = 'https://www.93xscc.com'+link[0]
        content = requests.get(url).content.decode()
        text = re.search('码阅读.*?<p>(.*?)</div>', content, re.S).group(1)
        #print(text.replace("</p><p>","\n"))
        text = text.replace("</p><p>","\n") ## 将</p><p>替换为换行符
        text = text.replace("</p>", "") ## 去除最后一个</p>
        text = text.replace("<p>", "") ## 去除尾声中的<p>
        os.makedirs('诛仙', exist_ok=True)
        doc.add_heading(link[1], 3)
        doc.add_paragraph(text)
    doc.save(os.path.join('诛仙','诛仙.docx'))
    

    搞定,得到了离线的《诛仙》小说了。


    image.png

    相关文章

      网友评论

          本文标题:简单爬虫——抓取诛仙小说

          本文链接:https://www.haomeiwen.com/subject/fmdkartx.html