美文网首页
爬小说谁的青春不迷茫

爬小说谁的青春不迷茫

作者: Day1_王老师 | 来源:发表于2017-12-14 23:10 被阅读0次

    @DC学院《Python爬虫:入门+进阶》

    今年11月7号,报名了DC学院python爬虫(入门进阶)课程,在此课程之前,我也简单接触过爬虫,大概有3个月的基础,但是苦于都是自学的,没有系统学习过,总是觉得学的有点杂乱,不成系统,于是决定找一家可以系统学习python爬虫的培训机构,于是正赶上DC学院开了这样一门课,我就报名参加了,说实话,报名学习之后,的确有很大的提高,思路比之前清晰,走位比之前风骚,有什么不懂的,在售后群里,都有大神和老师认真负责的解答疑惑,为他们点赞👍。

    这次是学院的一次作业,也是自己的一次实践,所以拿出来一起学习学习。

    下面开始今天的正题:我今天要爬136书屋的谁的青春不迷茫这本书的所有章节及其对应的内容。

    • 环境: Python3 + Macos。
    • 开发工具:PyCharm。
    • 内容:爬取136书屋谁的青春不迷茫这本书的全部内容
    • 思路:先爬取某一章的内容,然后再爬取全部章节链接地址,然后抽取其中内容。
    • 要爬取的链接地址如下:http://www.136book.com/shuidiqingchunbumimang/
    主页截图如下 主页

    页面上面有一行小字,不知道各位朋友有没有注意到,“暂不提供谁的青春不迷茫txt全集下载,请记住域名:www.136book.com",这样就没办法下载了?,不存在的!,今天我们就来下载一下。

    首先分析一下这个网站:每当点击其中各个章节的时候,是通过控制网址后面/eqlrcjd,这样类似的一串英文的不同,来区分每一章节。

    自序截图

    我们接着在主页开启chrome浏览器开发者工具,进行页面审查,很轻松,经过一圈查看,发现小说的内容在Network下面的Doc模块下。


    主页分析

    每一章的链接地址都是有规则地存放在<li>中。


    主页每一章页面链接地址

    经过分析,总章节爬取应该和每一章差不多,所以我们先来搞定每一章,然后再搞定全部章节。
    我们只需要打开其中一章,然后进行分析,我们要爬取的内容全都包含在这个<div>里面。


    某一章

    代码如下:

    from urllib import request
    from bs4 import BeautifulSoup
     
    if __name__ == '__main__':
     
        url = 'http://http://www.136book.com/shuidiqingchunbumimang/eqlrcjd/'
        head = {}
        head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
        req = request.Request(url, headers = head)
        response = request.urlopen(req)
        html = response.read()
        soup = BeautifulSoup(html, 'lxml')
        soup_text = soup.find('div', id = 'content')
        print(soup_text.text)
    
    运行后的截图: 第一次尝试

    显然下载了第一章的内容,但是没有达到完全自动化下载到电脑里,也没有达到整本书的下载,我们接下来,进一步优化。

    总章节内容:
    所有的内容都放在一个所有的内容都放在一个<div id=”book_detail” class=”box1″>中。
    这儿有两个一模一样的<div id=”book_detail” class=”box1″>。
    第一个<div>包含着最近更新的章节,第二个<div>包含着全集内容。
    请注意,我们要爬取的是第二个<div>中的内容。


    总章节

    代码如下:

    from urllib import request
    from bs4 import BeautifulSoup
     
    if __name__ == '__main__':
        # 目录页
        url = 'http://www.136book.com/shuidiqingchunbumimang/'
        head = {}
        head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
        req = request.Request(url, headers = head)
        response = request.urlopen(req)
        html = response.read()
    
        soup = BeautifulSoup(html, 'lxml')
        # find_next找到第二个<div>
        soup_texts = soup.find('div', id = 'book_detail', class_= 'box1').find_next('div')
        # 遍历ol的子节点,打印出章节标题和对应的链接地址
        for link in soup_texts.ol.children:
            if link != '\n':
                print(link.text + ':  ', link.a.get('href'))
    

    运行后截图


    总章节截图

    爬取全部章节及其内容
    将每个解析出来的链接循环代入到url中解析出来,并将其中的文本爬取出来,并且写到本地/Users/wangchao/Desktop/xs66.rtf中。
    这是代码:

    from urllib import request
    from bs4 import BeautifulSoup
    import os
    if __name__ == '__main__':
        url = 'http://www.136book.com/shuidiqingchunbumimang/'
        head = {}
        head[
            'User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
        req = request.Request(url, headers=head)
        response = request.urlopen(req)
        html = response.read()
        soup = BeautifulSoup(html, 'lxml')
        soup_texts = soup.find('div', id='book_detail', class_='box1').find_next('div')
        # 打开文件
    
        f = open('/Users/wangchao/Desktop/xs66.rtf', 'w')
    
        # 循环解析链接地址
        for link in soup_texts.ol.children:
            if link != '\n':
                download_url = link.a.get('href')
                download_req = request.Request(download_url, headers=head)
                download_response = request.urlopen(download_req)
                download_html = download_response.read()
                download_soup = BeautifulSoup(download_html, 'lxml')
                download_soup_texts = download_soup.find('div', id='content')
                # 抓取其中文本
                download_soup_texts = download_soup_texts.text
                # 写入章节标题
                f.write(link.text + '\n\n')
                # 写入章节内容
                f.write(download_soup_texts)
                f.write('\n\n')
        f.close()
    

    由于电脑原因,我只好用word打开


    结果

    总结:通过这次作业的实际操作,我学到了很多,最重要的是思路。

    相关文章

      网友评论

          本文标题:爬小说谁的青春不迷茫

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