python爬虫爬取还未出版的《龙族5悼亡者的归来》小说

本文开发环境:

  • python环境:python3
  • 安装的库:request、re、pymongo

背景

首先,要知道我们此次的任务是抓取还未出版的小说《龙族》(第五部)。虽然这本书还未出版,但是已经在很多网站上连载,相信喜欢龙族系列的人都曾在网站上在线看过,但是有的网站广告太多,不方便阅读,所有我就想用python爬虫的知识将其爬取下来,方便阅读,以下是实现步骤。

实现步骤

一、选取目标网页

目前正在连载龙族五的网站很多,这里我选取的网页是: 努努书坊
网页如下图:龙族五网页图
其实其他网站也行,不过这个网站的广告比较少,爬取起来也比较简单。下面开始上代码,看看利用python是如何爬取的。

二、 使用request爬取目标网页

代码设计

代码主要分成三步:下载网页—>解析网页内容—>存储到本地txt文件,下面开始上代码。

def parse_page(url, t):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'Connection': 'close'
    }
    time.sleep(random.randint(1, 5))
    response = requests.get(url, headers)
    print("第" + str(t) + "章请求正常")
    # 网站的格式是gbk格式
    text = response.content.decode('gbk') 
    # 这里是获取小说正文部分的正则表达式
    base_content = re.findall(r'<div class="text"\salign="justify">.*?<p>(.*?)</p>', text, re.DOTALL)
    print("第" + str(t) + "章解析正常")
    # 这里是获取小说的章节名称
    page_name = re.findall(r'<div id="Article">.*?<h1>(.*?)<br>', text, re.DOTALL)
    # 这里是获取小说的下一章节的网址
    next_page = re.findall(r'<p align="center">.*?<a href=.*?>.*?</a>.*?<a href=.*?>.*?</a>.*?<a href=(.*?)>.*?</a>', text, re.DOTALL)[1]
    for content in base_content:
        x = re.sub(r'<p>', "", content)
        p = re.sub(r'&nbsp;|\n', "", x)
        # 这里采用追加的方式写入
        with open("E:/workspace/python-ws/littl_robot/poetry_spider/龙族第五部.txt", 'a', encoding='utf-8') as fp:
        	# 这里是去除空格和换行符 
            p = p.strip()
            fp.write(str(page_name) + "\n" + '='*100 + "\n")
            fp.write(p + "\n" + "="*100 + "\n")
        print("第" + str(t) + "章写入文件正常")
    print("第" + str(t) + "章抓取正常")
    next_page = next_page.replace('\'', '')
    # 这里是返回下一章节的网址,方便爬取
    return next_page

接下来是主函数部分的代码:

def main():
    original_url = "https://www.kanunu8.com/book2/10943/194884.html"
    base_url1 = "https://www.kanunu8.com/"
    base_url2 = "book2/10943/"
    next_page_url_1 = parse_page(original_url, 1)
    real_url = original_url
    for t in range(2, 180):
        next_page_url_2 = base_url2 + next_page_url_1
        real_url = parse.urljoin(base_url1, next_page_url_2)
        print('Url打印正确: ' + real_url)
		next_page_url_1 = parse_page(real_url, t)
        if next_page_url_1 == './':
        	break
            print("已经全部爬取完,结束爬取")


if __name__ == '__main__':
    main()

三、目标完成

最后,我们会得到一个txt文件,可以采用其他工具将其转换为PDF文件,实际效果如下图:
龙族五pdf
这样我们就可以在手机上阅读还未出版的龙族五了,是不是很方便呢?

四、感想

首次采用python爬虫完成了自己的一个小想法,因为是新手,代码还有很多不规范的地方,我会继续改进的,最后,欢迎各路大神评论指出,我会虚心学习的。
啦啦啦

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值