python爬小说案例

最近小熙在学习python,都说用他写爬虫比较方便。小熙就吸取了下前辈们的经验,尝试了下。

小熙的环境是python3、pycharm、win10

1.导入bs4模块

由于我们使用到了BeautifulSoup,所以需要导入bs4模块
在pycharm的终端输入:

pip3 install Beautifulsoup4 

如图:
python爬小说案例

也可以使用win的命令行输入,注意是管理者

如果没有request的,和上面同理。把命令中的Beautifulsoup4 修改成request就好了。

2.案例

话补多说,直接上代码,小熙已经把每一步都标记好了。

from urllib import request
from bs4 import BeautifulSoup

# 163小说网的爬取免费案例
class BookCrawler():
        # url是下载小说的章节目录页地址,down_location是下载到本地保存的地址
        def download_book(self, url, down_location):
            # 在请求头中添加用户代理
            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页面
            html = response.read()
            # 解析html页面(乱码)
            soup = BeautifulSoup(html, 'lxml')
            # 获取目录内容外一层的div,返回的是list
            soup_texts = soup.find('div', id='book_detail', class_='box1').find_next('div')
            # 打开文件,保存的本地地址
            f = open(down_location, 'w')
            # 循环解析链接地址,操作每一个章节下载完全本
            for link in soup_texts.ol.children:
                # 去除换行
                if link != '\n':
                    # 获取章节列表中的url地址(页面结构不同,获取操作不同)
                    download_url = link.a.get('href')
                    # 发出跳转到对应章节的url地址请求
                    download_req = request.Request(download_url, headers=head)
                    # 获取响应内容
                    download_response = request.urlopen(download_req)
                    # 根据章节url地址获取到对应章节的页面
                    download_html = download_response.read()
                    # 解析html页面(乱码)
                    download_soup = BeautifulSoup(download_html, 'lxml')
                    # 去除js广告
                    [s.extract() for s in download_soup('script')]
                    # 根据页面结构获取内容文本外的div
                    download_soup_texts = download_soup.find('div', id='content')
                    # 根据获取的div抓取其中的小说文本
                    download_soup_texts = download_soup_texts.text
                    # print(download_soup_texts)
                    # 写入章节标题
                    f.write(link.text + '\n\n')
                    print("已下载:"+link.text)
                    # 写入章节内容
                    f.write(download_soup_texts)
                    f.write('\n\n')
            #  最后一步关流,不要忘了
            f.close()

if __name__ == '__main__':
  bc = BookCrawler()

  # 输入章节目录的地址,根据输入保存的地址下载全部内容到本地
  bc.download_book('http://www.136book.com/duidishijianduidiren/', 'F:/duidishijianduidiren.txt')

3. 结果

  1. 控制台下载进度
    python爬小说案例

  2. 本地文件
    python爬小说案例

小熙用《对的时间对的人》这本小说举例的,本网站其他的同理。如果转换网站的话,就需要根据不同网站的内容结构修改代码了。

如果经济充裕还是提倡购买正版,毕竟创作不易,本文仅供学习交流。