鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: 海风zZ

[作品展示] 多进程爬取金庸小说全集

[复制链接]
发表于 2019-1-10 17:45:23 From FishC Mobile | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-10 20:23:55 | 显示全部楼层
多进程爬取金庸小说全集 [修改]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-10 21:06:17 | 显示全部楼层
好奇进来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-11 04:46:15 | 显示全部楼层
yh6788 发表于 2019-1-9 15:04
我试了下,半个小时把全页面全下载下来了,然后我又进目标网址里看了下。

憋说啦,我有点懵😵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-11 06:25:47 From FishC Mobile | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-16 23:36:48 From FishC Mobile | 显示全部楼层

学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-17 08:41:41 | 显示全部楼层
多进程爬取金庸小说全集!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-17 14:17:11 | 显示全部楼层
楼主您好,我初学,试着加了一些注解,方便后面同样初学的人。


# -*- coding: cp936 -*-
'''
python 3

多进程爬取金庸小说全集,存在程序运行目录下,应用windows
'''
import time
import os
from urllib import request
from multiprocessing import  Pool
from lxml import etree
from concurrent.futures import ThreadPoolExecutor


def get_html(url):
    #定义函数get_html
    headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0',
               'Connection': r'keep-alive',
               'Referer': r'http://www.itcast.cn/channel/teacher.shtml'}
    #设置爬虫的虚拟头
    req = request.Request(url, headers=headers)
    #等于req = request.get(url)#多了一个headers头伪装
    page = request.urlopen(req).read().decode('utf-8')#得到表页
    html = etree.HTML(page)#新增表页地址
    print(page)
    return html        #得到新的地址


def download(url_3,m):
        html_3 = get_html(url_3)
        # 得到小说名称
        title_novel = html_3.xpath('//div/div/span/a/text()')[1]
        # print(title_novel)
        #得到小说每一个章节的名称
        chapter = html_3.xpath('//div/h1/text()')[0]
        # print(chapter)
        #得到每一个章节小说的内容
        content = html_3.xpath('//body/div/div/p/text()')
        if m == 'o':
            folder = r'旧版/%s/' % title_novel
            #定义小说名的目录
            if (not os.path.exists(folder)):
                os.makedirs(folder)
                #如果没有目录,就新建这个目录
        elif m == 'n':
            folder = '新修版/%s/' % title_novel
            if (not os.path.exists(folder)):
                os.makedirs(folder)
        else:
            folder = '修订版/%s/' % title_novel
            if (not os.path.exists(folder)):
                os.makedirs(folder)

        filename = folder + chapter + '.txt'
        with open(filename, 'a', encoding="utf-8") as f:
            f.write(chapter + '\n')
        for j in content:
            with open(filename, 'a', encoding="utf-8") as f:
                f.write(j + '\n')
        print('正在下载' + title_novel + chapter + ',请稍后....')


def main(url):
    url_2 = 'http://www.jinyongwang.com' + url
    html_2 = get_html(url_2)
    data_urls = html_2.xpath('//ul[@class="mlist"]/li/a/@href')
    #进入微循环,下载每一个资料,并交download函数处理
    for i in data_urls:
            #循环处理data_urls里面的数据
        url_3 = 'http://www.jinyongwang.com' + i
        #在每一个data_urls里面的数据前面加上http://www.jinyongwang.com的全称,然后赋值给url_3
        m = i[1]
        download(url_3,m)


if __name__ == '__main__':
    #需要获取的第一个网址
    #程序开始,如果执行名包括程序名,程序开始执行
    start_time = time.time()
    #记录程序开始时间
    star_url = 'http://www.jinyongwang.com/book/'
    #设置要抓哪个网址
    html_1 = get_html(star_url)
    print(html_1)
    '''
    #用def的get_html函数第一步处理目标网址
    urls = html_1.xpath('//ul[@class="list"]/li/p[@class="title"]/a/@href')
    p = ThreadPoolExecutor(max_workers=20)
    #线程池的个数不超过CPU的5倍,20是双核四线程cpu
    for i in urls:
            #进入循环,处理urls里面的每一个值,并且把每一个值赋给i,然后处理完。
        p.submit(main,i)#下载页面。利用main函数
    p.shutdown()
    #处理得到的页面,并整理保存。
    end_time = time.time()
    #记录程序结束时间
    time1 = end_time-start_time
    print("用时" + time1)
    #输出程序结束时间-开始时间,得到程序执行了多久。
'''
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 05:03:40 | 显示全部楼层
谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-18 03:56:59 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-19 09:25:43 | 显示全部楼层
kk
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-24 15:06:08 | 显示全部楼层
学习~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-25 10:10:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-25 14:00:08 From FishC Mobile | 显示全部楼层
好棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-25 15:33:48 | 显示全部楼层
这个只有回复才能看到内容?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-4 14:01:43 | 显示全部楼层
66666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 17:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表