Astray.R
发表于 2019-1-10 17:45:23
看看
hzxsxds01
发表于 2019-1-10 20:23:55
多进程爬取金庸小说全集 [修改]
CJPLBC
发表于 2019-1-10 21:06:17
好奇进来{:10_277:}看看
多幸运t
发表于 2019-1-11 04:46:15
yh6788 发表于 2019-1-9 15:04
我试了下,半个小时把全页面全下载下来了,然后我又进目标网址里看了下。
憋说啦,我有点懵😵
94385736
发表于 2019-1-11 06:25:47
好
zhuwenjian
发表于 2019-1-16 23:36:48
学习学习
woshiaxie
发表于 2019-1-17 08:41:41
多进程爬取金庸小说全集!!!!
yh6788
发表于 2019-1-17 14:17:11
楼主您好,我初学,试着加了一些注解,方便后面同样初学的人。
# -*- coding: cp936 -*-
'''
python 3
多进程爬取金庸小说全集,存在程序运行目录下,应用windows
'''
import time
import os
from urllib import request
from multiprocessing importPool
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()')
# print(title_novel)
#得到小说每一个章节的名称
chapter = html_3.xpath('//div/h1/text()')
# 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
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)
#输出程序结束时间-开始时间,得到程序执行了多久。
'''
denngyu
发表于 2020-3-21 05:03:40
谢谢谢
xysxys
发表于 2021-3-18 03:56:59
666
rsj0315
发表于 2021-3-19 09:25:43
kk
nikita001
发表于 2021-3-24 15:06:08
学习~~
975050208@qq.co
发表于 2021-3-25 10:10:33
{:5_108:}
yangwawa
发表于 2021-3-25 14:00:08
好棒
python初学者021
发表于 2021-3-25 15:33:48
这个只有回复才能看到内容?
slw507520
发表于 2021-6-4 14:01:43
66666666666