首页 编程教程正文

Python爬取稻草人书屋小说站源码

piaodoo 编程教程 2020-02-22 22:16:37 1514 0 python教程

本文来源吾爱破解论坛

本帖最后由 龟仔龟龟 于 2020-2-20 16:23 编辑
代码分享

最近学习了下Python爬虫,于是尝试批量爬取了稻草人书屋小说站的小说,下面贴上源码,仅供交流学习

import requests
from bs4 import BeautifulSoup
import os

#root为小说下载保存时的根目录
root = r'D:\\E-book\\literature\\'

#构造浏览器访问
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36",
         "Referer":"https://www.daocaorenshuwu.com/"}

#通过一本小说的介绍界面,爬取作者所有作品介绍界面URL
#url = 'https://www.daocaorenshuwu.com/txt/11205.html'  这个请自行替换,网址格式需和这个类似
r = requests.get('https://www.daocaorenshuwu.com/txt/10182.html', headers = headers)
r.encoding = r.apparent_encoding

#用BeautifulSoup解析源码
soup = BeautifulSoup(r.text, 'html.parser')

#提取这个作者所有作品介绍界面URL
soup = soup.find_all('div', 'col-md-6 col-xs-12')

#创建介绍界面URL的一个列表
introduction_url = []

for i in range(len(soup)):
    soup[i] = soup[i].find('a')

    #提取出的URL为相对路径
    #将其转换为绝对路径
    part_url = soup[i].get('href')
    complete_url = 'https://www.daocaorenshuwu.com' + part_url
    introduction_url.append(complete_url)

#依次爬取列表中的小说介绍界面
#从而获取下载认证界面地址  
for url in introduction_url:   

    #用rstrip()去掉url后面的\n   
    r = requests.get(url = url.rstrip(), headers = headers)
    r.encoding = r.apparent_encoding

    #用BeautifulSoup解析源码
    soup = BeautifulSoup(r.text, 'html.parser')

    #soup_name用于提取书名
    soup_name = soup

    #提取小说下载界面认证URL
    soup = soup.find('div', 'col-md-6 text-center')
    soup = soup.find('a')
    soup = soup.get('href')

    #构造可以通过认证的POST请求URL
    #可以通过开发者工具得出
    #其实verification后面的数字就是让你关注公众号获取的验证码
    download_url = 'https://www.daocaorenshuwu.com' + soup + '&verification=12022018' 

    #提取小说名称用于文件保存 
    soup_name = soup_name.find('a', 'media-right')
    soup_name = soup_name.find('img')
    novel_name = soup_name.get('alt')

    #path为小说完整保存路径
    path = root + novel_name + '.zip'

    #下载小说
    print(novel_name + '下载中')
    if not os.path.exists(root):
        os.mkdir(root)  
    if not os.path.exists(path):
        res = requests.post(url = download_url, headers = headers)
        if (res.status_code == 200):
            with open(path, 'wb') as f:
                f.write(res.content)
                f.close()
                print(novel_name + '下載完成')
效果图

Snipaste_2020-02-20_13-59-24.png (79.28 KB, 下载次数: 0)

下载附件  保存到相册

2020-2-20 14:00 上传

效果一

效果一

Snipaste_2020-02-20_13-59-47.png (59.53 KB, 下载次数: 0)

下载附件  保存到相册

2020-2-20 14:00 上传

效果二

效果二

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/8073.html

搜索