新手一定要会的Python爬虫技能,搜索名字即可下载全文小说?

131 阅读3分钟

 前言

          hello,大家好久不见了哈,不知道有没有想UP啊。最近呢由于个人原因导致没有时间来给大家分享新的案例教程了,所以抱歉各位哈,现在问题都解决了,会坚持每天更新的,希望大家能喜欢.

编辑

        那么今天分享给大家的案例是啥呢,那就是通过短短二十行代码来实现输入小说名字就可以下载文本的这样一个爬虫案例,相对来讲还是非常简单的,能让大家好好的上手,接下来就跟着up的思路一起来实现这样的一个功能吧

项目分析

小编以前是很爱看小说,就目前的几年来讲我基本没有看过小说了,也不知道哪些网站能爬,所以就随便找了一个。、我们首先来到网站的小说top榜查看一下网页源代码

​编辑

 ​编辑

还是可以清楚的看到top榜里的小说全都在

  • 标签中这就为我们的爬虫带来了很大的便利,只需要获取每个li标签里的内容就可以完成。

    加下来我们找找文件在哪里下载,我们继续点击斗破苍穹来到下面的页面,为啥选择斗破这本小说,那是因为这个是up人生中第一本看完结的小说,也是印象最为深刻的小说。不知道大家有没有同感的,记得那时候等更新可是很难等的。

    ​编辑

     我们继续点击进去看到了文件的下载链接,为了能够使爬虫的代码更加简单我们来看看这个链接和之前li标签里的小说链接有什么不同​编辑

     

     

    可以看到他们有相同的一串编号,这样我们只需要获取每个小说的编号就能获得所有小说的下载链接了,下面我们来完善我们的代码。

    代码编写

    这个项目我们需要的库有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()
    

     源代码都贴了,还可以进一步的优化,但是考虑到大家的水平都是不一样的,所以今天这篇就到这里为止吧,对了可以关注一下下方的公众号哈。有不懂的问题欢迎留言。咱们下一篇见

    编辑