语言舒尔特方格程序_【升级版】Python批量下载星月文学网亦舒小说全集

    前两天完成了《我的前半生》下载,想下载更多,又不想一个一个去操作,毕竟一共有239篇,于是继续完善程序实现批量处理。这次就直接上源码,以备后续再做类似功能,不用重复写代码了。提高效率是每个程序员热衷的事情,毕竟将人的活交给机器干是我们的职责所在。学习Python对我而言还真的是解决日常生活和工作中提高效率行之有效的一种编程语言。

     好了,不啰嗦了,直接上源码:

'''

实现星月文学网https://www.xingyueboke.com/yishu/批量下载全部小说

爬虫线路:requests - bs4 - txt

Python版本:3.7

OS:windows 10

'''

import requests

import time

import sys

import os

import queue

from bs4 import BeautifulSoup

# 用一个队列保存url

q = queue.Queue()

# 首先我们写好抓取网页的函数

def get_content(url):

    try:

        headers = {

            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36',

        }

        r = requests.get(url=url, headers=headers)

        r.encoding = 'utf-8'

        content = r.text

        #print(content)

        return content

    except:

        s = sys.exc_info()

        print("Error '%s' happened on line %d" % (s[1], s[2].tb_lineno))

        return " ERROR "

# 解析内容

def praseContent(content, story_name, story_path):

    soup = BeautifulSoup(content,'html.parser')

    chapter = soup.find(name='h1',class_="post-title").text

    content = soup.find(name='div',id="nr1").text

    save(chapter, content, story_name)

    try:

        next1 =           soup.find(name='nav',class_="mb2").find(name='ul').find_all('li')[1].find(name="a").get("href")

        # 如果存在下一个章节的链接,则将链接加入队列

        if next1 != story_path:

            q.put(base_url+next1)

            #print(next1)

    except:

        print("下载完毕")

# 保存数据到txt

def save(chapter, content, story_name):

    filename = "./亦舒小说全集/"+ story_name+".txt"

    f =open(filename, "a+",encoding='utf-8')

    f.write("".join(chapter)+'\n')

    f.write("".join(content.split())+'\n')

    f.close

# 主程序

def main():

    start_time = time.time()

    q.put(base_url)

    # 如果队列为空,则继续

    while not q.empty():

        content = get_content(q.get())

        soup = BeautifulSoup(content,'html.parser')

        storyurl_list = soup.find_all(name='li',class_= "hot-book")

        storyname_list = soup.find_all(name='h2',class_= "pop-tit")

        story_count = len(storyurl_list)

        print("亦舒全集共 %d 篇"%story_count)

        for i in range(0, story_count-1):

            story_name = storyname_list[i].text

            story_name = story_name.replace("《", "").replace("》", "")

            print("正在下载:%s"% story_name)

            current_url = storyurl_list[i].find(name='a').get("href")

            story_path = current_url.split('/')[-1]

            q.put(current_url)

            while not q.empty():

                content = get_content(q.get())

                soup = BeautifulSoup(content,'html.parser')

                first_url = soup.find(name='div',class_= "book-list").find(name='ul').find_all('li')[0].find(name="a").get("href")

                q.put(first_url)

                # 如果队列为空,则继续

                while not q.empty():

                    content = get_content(q.get())

                    #print(content)

                    praseContent(content, story_name, story_path)

    end_time = time.time()

    project_time = end_time - start_time

    print('程序用时', project_time)

# 接口地址

base_url = 'https://www.xingyueboke.com/yishu'

if __name__ == '__main__':

    main( )

代码运行之后,如下所示:

d284dddf403a71efa9467d4de37d099b.png

能看到一个一个在陆续下载中了,本文还遗留一个问题,如果网络或连接断开不会自动重连并继续下载,需要重行运行下载,当然可以修改循环中的数字,指定从那一篇开始继续下载。喜欢本文章就点个再看吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python尔特方格是一种用于可视化数据的图形工具,它由Python编程语言和matplotlib库提供支持。尔特方格可以帮助我们更好地理解数据之间的关系和趋势。 尔特方格通常用于绘制二维数据,其中一个维度表示数据的横坐标,另一个维度表示数据的纵坐标。每个数据点在方格中的位置由其横纵坐标决定,而数据点的颜色或大小可以表示其对应的数值。 在Python中,我们可以使用matplotlib库来创建尔特方格。首先,我们需要导入matplotlib库,并创建一个图形对象。然后,我们可以使用scatter函数来绘制数据点,并通过设置参数来调整数据点的颜色、大小等属性。最后,我们可以使用xlabel、ylabel和title函数来添加坐标轴标签和标题。 下面是一个简单的示例代码,演示了如何使用Python绘制尔特方格: ```python import matplotlib.pyplot as plt # 创建图形对象 fig, ax = plt.subplots() # 数据 x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25] # 绘制尔特方格 ax.scatter(x, y, c='blue', s=50) # 添加坐标轴标签和标题 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_title('Schulte Grid') # 显示图形 plt.show() ``` 这段代码将创建一个尔特方格,其中x轴表示数据的横坐标,y轴表示数据的纵坐标。数据点的颜色为蓝色,大小为50。坐标轴标签分别为'X'和'Y',标题为'Schulte Grid'。 希望以上内容对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值