吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4751|回复: 18
收起左侧

[Python 转载] 【仅供学习参考】Python多线程池采集小说,超简单!

[复制链接]
huguo002 发表于 2019-5-9 23:13
本帖最后由 huguo002 于 2019-5-10 23:05 编辑

【仅供学习参考】Python多线程池采集小说,超简单!
【仅供学习参考】Python多线程池采集小说,超简单!
运行程序 需要输入书目录为书链接名字,一串数字id
输入书目录,比如:338379
小说 三寸人间

[Python] 纯文本查看 复制代码
#采集小说lingdiankanshu.co

import requests
from lxml import etree
from multiprocessing.dummy import Pool as ThreadPool #多线程
import os
global xsmz
xsmz=''

def cljj(sm):
    global xsmz
    #url="https://www.lingdiankanshu.co/338379/"
    url="https://www.lingdiankanshu.co/{}/".format(sm)
    html=requests.get(url,timeout=20).text
    #print(html)
    ljnr=etree.HTML(html)
    #获取小说名
    xsm=ljnr.xpath('//*[@id="info"]/h1/text()')
    xsmz=xsm[0]
    ljs=[]
    ljj=ljnr.xpath('//*[@id="list"]/dl/dd/a/@href')
    for lj in ljj:
        lj=url+lj
        ljs.append(lj)

    return(ljs)

def cxsnr(url):
    global xsmz
    #url="https://www.lingdiankanshu.co/338379/2081667.html"
    html=requests.get(url,timeout=20).text
    #print(html)
    xq=etree.HTML(html)
    bt=xq.xpath('//*[@class="bookname"]/h1/text()')
    bt=bt[0]
    print(bt)
    nr=xq.xpath('//*[@id="content"]/text()')
    xsxq=''
    for nrxq in nr:
        nrxq.replace('\u3000\u3000','')
        xsxq=xsxq+nrxq+'\r\n'
    os.makedirs("./xs/"+xsmz+"/", exist_ok=True)
    with open('./xs/'+xsmz+'/'+bt+'.txt','w',encoding='utf-8') as f:
        f.write(bt+'\r\n'+xsxq)
        print(bt+'.txt---采集成功!')




if __name__ == "__main__":
    sm=input('请输入书目录:')
    urls=cljj(sm)
    print(urls)
    try:
        # 开4个 worker,没有参数时默认是 cpu 的核心数
        pool = ThreadPool()
        results = pool.map(cxsnr,urls)
        pool.close()
        pool.join()
    except:
        print("Error: unable to start thread")


多线程采集小说.JPG

仅供参考和学习!
ps,不知道是我网速差,还是该网站原因,request请求经常不成功!

更新!!
pyinstaller打包py成exe可执行程序,终于没有易语言可怕的报毒了!!
附exe下载地址,百度云:链接: https://pan.baidu.com/s/1kwQLSMXznHtXyy9066Typw 提取码: pg7v
测试了一下,没有优化好,程序会中断。。坑爹的网络!!!
打包exe程序.JPG


  • #后面的路径为你的python文件的位置(如果第一步没有添加变量,这里还是要到Script下执行pyinstaller.exe文件)


  • pyinstaller -F c:\...\your_python_file.py






Tips:实践问题
pyinstaller打包后的exe运行怎么去掉弹出的命令行提示窗口?
1.如果使用.spec文件的话, 在该文件中找到console=True修改为console=False
2.如果是直接指定python文件进行pyinstaller打包的话,需要添加—noconsolepyinstaller path\mycode.py--noconsole
如果想只打包成一个exe:pyinstaller -F path\mycode.py --noconsole或:pyinstaller -F -wpath\mycode.py
更换最终exe生成路径在cmd中,一开始就要 cd D:PythonEXE 切换到输出文件夹,然后在用上面的代码,
说明:各个参数的作用,例子:
pyinstaller -F -w -pD:        mpcore-pythonlibs -i d:        mpmain.ico main.py-F 表示生成单个可执行文件;
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)。
-w 表示去掉控制台窗口,这在GUI界面时非常有用。
不过如果是命令行程序的话那就把这个选项删除吧!;
-c –console, –nowindowed 使用控制台,无界面(默认);
-p 表示你自己自定义需要加载的类路径,一般情况下用不到;
-i 表示可执行文件的图标。
来自头条号:小锋学长


@洛枫

感谢老哥的指点!!!

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
XIAOLIANG4042 + 1 + 1 我很赞同!
不知火龙果 + 1 + 1 刚试了一下。发现只是采集了几个章节而已。1000多章就采集了几章就不动了。.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

uumesafe 发表于 2019-5-10 04:17
requests 请求加一个 headers,可以试一试,

安装 fake_useragent .
from fake_useragent import UserAgent
headers = {
    'User-Agent': UserAgent().random,
}

为了保存采集的完整性,可以在采集函数中加入 对 requests的响应代码 status_code 的判断,不等于200可以重新请求url。


 楼主| huguo002 发表于 2019-5-10 09:50
uumesafe 发表于 2019-5-10 04:17
requests 请求加一个 headers,可以试一试,

安装 fake_useragent .

感谢老哥,我试试!!!
4点多还在,老哥这是通宵奋战么,注意身体!!!
头像被屏蔽
沐雨红尘 发表于 2019-5-9 23:23
时空之外 发表于 2019-5-10 09:01
兄嘚,这是多进程吧
 楼主| huguo002 发表于 2019-5-10 09:49
时空之外 发表于 2019-5-10 09:01
兄嘚,这是多进程吧

多线程啊,线程池
 楼主| huguo002 发表于 2019-5-10 09:49
沐雨红尘 发表于 2019-5-9 23:23
这是网上某课程讲解爬虫的部分代码?

老哥是过来人啊,根据精易论坛的python特训班写的!
邓大侠 发表于 2019-5-10 10:49
贼6 ,正在学习python,学习下,正好学到多线程了.不过感觉可以把章节写入到一个文件要好吧.
时空之外 发表于 2019-5-10 11:58
huguo002 发表于 2019-5-10 09:49
多线程啊,线程池

额, 还真是multprocessing的线程池
 楼主| huguo002 发表于 2019-5-10 13:53
邓大侠 发表于 2019-5-10 10:49
贼6 ,正在学习python,学习下,正好学到多线程了.不过感觉可以把章节写入到一个文件要好吧.

我瞎写的。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 11:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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