首页 > 编程语言 >PYTHON爬取图片

PYTHON爬取图片

时间:2022-12-10 20:55:05浏览次数:50  
标签:src img PYTHON resp list 爬取 headers href 图片

from threading import Thread
from concurrent.futures import ThreadPoolExecutor
from multiprocessing import Process, Queue
import requests
from lxml import etree
from urllib import parse

# 异常处理还未优化,后续补上
# 未解决问题1:这是爬取多个页面的当前所有图片,图片内部的还未处理
# 未解决问题2:当爬取页面过多时,会报错,原因还未找到,后续补上

headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Mobile Safari/537.36",
# 防盗链 : 朔源,当前本次请求的上一级是谁
"Referer": "https://xxx"
}


def get_img_src(q):
urls = []
for i in range(1, 5):
if i == 1:
a = f"https://xxx/index.html"
else:
a = f"https://xxx/{i}.html"
urls.append(a)
href_list_all = []
for i in urls:
resp = requests.get(i, headers=headers)
resp.encoding = 'utf-8'
tree = etree.HTML(resp.text)
href_list = tree.xpath("//div[@class='list-box-p']/ul/li/a/@href")
href_list_all.append(href_list)

for all_list in href_list_all:
for href in all_list:
child_resp = requests.get(href, headers=headers)
child_resp.encoding = 'utf-8'
child_tree = etree.HTML(child_resp.text)
src = child_tree.xpath("//div[@class='img_box']/a/img/@src")[0] # 注意这里获取的是列表,需要取里面的下标为0的第一个元素值
q.put(src) # 循环向队列里装东西,后面好给下载用
print(f"---------------------------------------------------被塞进队列--------------------->{src}")
q.put("完事了")


def download(src):
print('开始下载------------>', src)
name = src.split('/')[-1]
with open("./image/" + name, mode='wb') as f:
resp = requests.get(src, headers=headers)
f.write(resp.content)
print('下载完毕------------>', src)


def download_img(q):
with ThreadPoolExecutor(5) as t:
while 1:
src = q.get() # 从队列里拿东西,如果没数据就阻塞,一直等着有数据来
if src == "完事了":
break
t.submit(download, src)


if __name__ == '__main__':
q = Queue()
p1 = Process(target=get_img_src, args=(q,))
p2 = Process(target=download_img, args=(q,))
p1.start()
p2.start()

标签:src,img,PYTHON,resp,list,爬取,headers,href,图片
From: https://www.cnblogs.com/mingdeng3000/p/16972305.html

相关文章

  • Selenium4+Python3系列(十二) - 测试框架的设计与开发
    前言自己从未没想过能使用python来做自动化测试框架的设计、开发。可能有人会好奇说,六哥,你怎么也用python写测试框架了?领导说:python你也没有实际工作经验,可能就是是自......
  • python 笔记
    1、Myfirstprocedure。#我的第一个程序。print('Helloworld!')#print:打印到屏幕。(‘打印到屏幕的内容’)print('Ilikeyou!')#例一执行程序,输出如下:......
  • Selenium4+Python3系列(十二) - 测试框架的设计与开发
    前言自己从未没想过能使用python来做自动化测试框架的设计、开发。可能有人会好奇说,六哥,你怎么也用python写测试框架了?领导说:python你也没有实际工作经验,可能就是自己......
  • python之路46 django request对象 form表单 pycharm连接数据库 ORM简介
    静态文件配置1.编写一个用户登录页面2.静态文件不怎么经常变化的文件主要针对html文件所使用的到的各种资源css文件、js文件、img文件、第三方框架文件......
  • Python实战案例,tkinter+random模块,实现课堂随机抽选提问并语音播报学生姓名
    先看运行结果前言今天给大家介绍Python实现课堂随机抽选提问并语音播报学生姓名实战案例,废话不多说直接开整~开发工具Python版本:3.8相关模块:tkinter模块time模块......
  • 原来Python自带了数据库,用起来真方便
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • PDF转图片
    PDF转图片-SuperPDF它可能是最强的PDF批量转图片软件。支持批量导入转换,不限文件大小,不限页面数,无损快速转换!操作非常简便:添加或拖入pdf文件,调整参数(或使用默认值),点击转......
  • python中数据库查看
    数据读取:1、使用fetchone()方法获取单条数据data=cursor.fetchone()print(data)2、使用fetchall()方法获取多条数据rows=cur.fetchall()forrowinrows:pr......
  • PDF转图片
    PDF转图片-SuperPDF它可能是最强的PDF批量转图片软件。支持批量导入转换,不限文件大小,不限页面数,无损快速转换!操作非常简便:添加或拖入pdf文件,调整参数(或使用默认值),点击转......
  • Python模块fileinput操作文件和目录操作总结
    前言之前介绍Python的pathlib模块可以有效的路径及文件查找等方便操作,本篇介绍一个相对readlines()获取文件内容更高效的用法fileinput模块对一个或者多个文件的内容迭......