关键词文章采集源码(python多线程头像图片源码附exe程序及资源包!(一))

优采云 发布时间: 2022-04-04 18:09

  关键词文章采集源码(python多线程头像图片源码附exe程序及资源包!(一))

  互联网上怎么可能没有一两件马甲,而头像等信息的完善无疑是必要的。关于头像图片,大家不妨采集看网站上的头像图片,这样就不用找了。我能! !

  目标网址:

  Python多线程抓取头像图片源码,附exe程序和资源包!

  相关介绍:

  1.用到的库requests、etree、re、os、ThreadPool

  2.网页编码为utf-8,需要转码:html.encoding=“utf-8”

  3.使用xpath获取图片链接

  4.多线程

  5.需要进入第n页,详细可以看动态图

  6.头像的首页是栏目页面,没有页面,这里是if判断

  7.py打包exe命令:pyinstaller -F目录file.py

  关于多线程,线程池,这里使用线程池。这是一个旧模块。虽然有些人还在使用它,但它不再是主流。你可以参考一下!

  库安装方式:pip install threadpool

  基本用法:

  (1)引入线程池模块

  (2)定义线程函数

  (3)创建线程池threadpool.ThreadPool()

  (4)创建需要线程池处理的任务,即threadpool.makeRequests()

  (5)将创建的多个任务放入线程池,threadpool.putRequest

  (6)等到adpool.pool()处理完所有任务

  import threadpool

def ThreadFun(arg1,arg2):

pass

def main():

device_list=[object1,object2,object3......,objectn]#需要处理的设备个数

task_pool=threadpool.ThreadPool(8)#8是线程池中线程的个数

request_list=[]#存放任务列表

#首先构造任务列表

for device in device_list:

request_list.append(threadpool.makeRequests(ThreadFun,[((device, ), {})]))

#将每个任务放到线程池中,等待线程池中线程各自读取任务,然后进行处理,使用了map函数,不了解的可以去了解一下。

map(task_pool.putRequest,request_list)

#等待所有任务处理完成,则返回,如果没有处理完,则一直阻塞

task_pool.poll()

if __name__=="__main__":

main()

  说明:makeRequests存储了启用多线程的函数,以及函数相关的参数和回调函数。回调函数可以省略(默认为none),也就是说makeRequests可以只带2个参数运行。

  pycharm运行效果:

  exe运行效果:

  附上源码:

  #www.woyaogexing.com头像采集

# -*- coding: utf-8 -*-

#by 微信:huguo00289

import requests

from lxml import etree

import re

import os

from multiprocessing.dummy import Pool as ThreadPool

def hqlj(n):

urls = []

for x in range(1,n+1):

url=f'https://www.woyaogexing.com/touxiang/index_{x}.html'

if x==1:

url='https://www.woyaogexing.com/touxiang/index.html'

print(url)

html=requests.get(url)

html.encoding="utf-8"

html=html.text

con=etree.HTML(html)

'''href=con.xpath('//div[@class="txList "]/a')

print(href)

for urls in href:

print(urls.attrib['href'])'''

href=con.xpath('//div[@class="txList "]/a/@href')

print(href)

for lj in href:

lj=f'https://www.woyaogexing.com{lj}'

print(lj)

urls.append(lj)

print(urls)

return urls

def hqtx(url):

#url="https://www.woyaogexing.com/touxiang/qinglv/2019/800160.html"

html=requests.get(url)

html.encoding="utf-8"

html=html.text

con=etree.HTML(html)

h1=con.xpath('//h1/text()')

h1=h1[0]

h1 = re.sub(r'[\|\/\\:\*\?\\\"]', "_", h1) # 剔除不合法字符

print(h1)

os.makedirs(f'./touxiang/{h1}/',exist_ok=True)

imgs=con.xpath('//img[@class="lazy"]/@src')

print(imgs)

i=1

for img in imgs:

img_url=f'https:{img}'

if 'jpeg' in img_url:

img_name=img_url[-5:]

else:

img_name = img_url[-4:]

n=str(i)

img_name='%s%s'%(n,img_name)

print(img_name)

print(img_url)

r=requests.get(img_url)

with open(f'./touxiang/{h1}/{img_name}','ab+') as f:

f.write(r.content)

print(f"保存{img_name}图片成功!")

i=i+1

#hqlj("https://www.woyaogexing.com/touxiang/")

if __name__ == '__main__':

n=input("请输入要采集的页码数:",)

n=int(n)

urls=(hqlj(n))

try:

# 开4个 worker,没有参数时默认是 cpu 的核心数

pool = ThreadPool()

results = pool.map(hqtx, urls)

pool.close()

pool.join()

print("采集所有头像完成!")

except:

print("Error: unable to start thread")

  采集资源效应:

  从现在开始,妈妈再也不用担心我没有头像了! !

  最后附上exe打包器,有需要的可以试试!

  链接:提取码:fuas

  爬取500页数据,分享给大家!一共1.71g!

  链接:提取码:trrz

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线