爬取图片实例

•selenium+win32爬取图片

Python学习交流Q群:903971231#####
"""爬取图片"""
import os
import threading
import time
from ctypes import windllimport requests
import win32ap
iimport win32clipboard
import win32con
from PySide2 import QtWidgets
from requests_html import HTMLSession, HTML
from PySide2.QtGui import QPixmap, QColor, QStandardItemModel, QStandardItem
from PySide2.QtCore import QFile, Qt, QDateTime, QDate, QTime, QTimer, QStringListModel, QModelIndex
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QTreeView, QTreeWidget, QHeaderView, QTreeWidgetItem, QWidget
from bs4 import BeautifulSoup
from selenium import webdriverfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECclass Test:
def __init__(self):
super(Test, self).__init__()
file = QFile('UI.ui')
file.open(QFile.ReadOnly)
file.close()
self.ui = QUiLoader().load(file)
self.ui.B_start.clicked.connect(self.start)
self.ui.B_left.clicked.connect(lambda: self.change_index('left'))
self.ui.B_right.clicked.connect(lambda: self.change_index('right'))
#定义图片列表
self.img_list = []
#图片自适应
self.ui.label.setScaledContents(True)
#当前显示的图片索引
self.index = 0
self.headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",           "Upgrade-Insecure-Requests": "1",            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36",        }self.text = ''# 使用phantomJS消除浏览器界面
#self.browser = webdriver.PhantomJS()
#出警告可使用设置chrome的方法
#浏览器设置
options = Options()
options.add_argument('--headless')       # self.browser = webdriver.Chrome(options=options)        self.browser = webdriver.Chrome()        self.wait = WebDriverWait(self.browser, 30)
self.session = requests.Session()
self.pull()
self.start_show_pic()def change_index(self, button):        if button == 'left':            self.index -= 1            pix = QPixmap('图片/' + self.img_list[self.index])            self.ui.label.setPixmap(pix)       else:            self.index += 1            pix = QPixmap('图片/' + self.img_list[self.index])            self.ui.label.setPixmap(pix)
def start_show_pic(self):
t1 = threading.Thread(target=self.show_pic)
t1.setDaemon(True)        t1.start()def show_pic(self):        while True:            for i in os.walk('图片'):                self.img_list = i[2]            if self.img_list:                pix = QPixmap('图片/' + self.img_list[self.index])                self.ui.label.setPixmap(pix)                time.sleep(3)                self.index += 1                if self.index > len(self.img_list):                    self.index = 0def start(self):       t1 = threading.Thread(target=self.get_img)        t1.setDaemon(True)        t1.start()def pull(self):       """
查看是否有目标网站的源代码,如果有就读取,
如果没有就发送请求       """        if os.path.exists('爬取图片.html'):            with open('爬取图片.html', 'r', encoding='utf8') as f:                self.text = f.read()                # print(self.text)        else:            self.browser.get('http://www.netbian.com/')            self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.list')))            self.text = self.browser.page_source            with open('爬取图片.html', 'w', encoding='utf8') as f:                f.write(self.text)            print(self.text)self.ui.B_start.setEnabled(True)
def get_img(self):
html = BeautifulSoup(self.text, 'lxml')
href_url = html.select('.list ul li a')
print(href_url)
for a in href_url:
#print('@@@', a)
if a['href'].startswith('/desk'):
url = 'http://www.netbian.com' + a['href']
#print(url)
self.browser.get(url)
pic = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.pic')))
soup = BeautifulSoup(self.browser.page_source, 'lxml')
img = soup.select_one('#main > div.endpage > div > p > a > img')
#print(img)
#print(img)
url = img['src']
title = img['title']
#获取路径
path = os.path.join(os.getcwd(), '图片', title + '.jpg')
if len(self.browser.window_handles) > 1:
self.browser.switch_to.window(self.browser.window_handles[1])
self.browser.close()
self.browser.switch_to.window(self.browser.window_handles[0])
# action = ActionChains(self.browser)
# action.move_to_element(pic)
# action.context_click(pic)  # 右键点击该元素
# action.perform()
# time.sleep(1)# action.send_keys('v')               # action.perform()                time.sleep(1)if os.path.exists(path):                    self.ui.listWidget.addItem(title + '.jpg 已存在,不下载')                    self.ui.listWidget.setCurrentRow(self.ui.listWidget.count() - 1)
else:# 鼠标移动到位置点右键
windll.user32.SetCursorPos(500, 700)
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0)
time.sleep(1)
# 按下v
win32api.keybd_event(86, 0, 0, 0)
win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)
# 将路径复制到剪切板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(path)
win32clipboard.CloseClipboard()# 鼠标定位输入框并点击                    windll.user32.SetCursorPos(274, 449)                   win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0)                    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0)                    time.sleep(1)# 按下ctrl+v                   win32api.keybd_event(17, 0, 0, 0)                    win32api.keybd_event(86, 0, 0, 0)                    win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)                    win32api.keybd_event(17, 0, win32con.KEYEVENTF_KEYUP, 0)                   time.sleep(3)
# 按下回车
win32api.keybd_event(13, 0, 0, 0)
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)                   time.sleep(2)                    self.ui.listWidget.addItem(title + '.jpg 下载完成')                    self.ui.listWidget.setCurrentRow(self.ui.listWidget.count() - 1)# res = self.session.get(url, headers=self.headers)
# print(res.text)
# with open('图片/' + title + '.jpg', 'wb') as f:
#     f.write(res.content)
# print(title + '.jpg 下载完成')elif a['href'].startswith('/index'):               url = 'http://www.netbian.com' + a['href']                print(url)                self.browser.get(url)                self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.list')))                self.text = self.browser.page_source                self.ui.listWidget.addItem('下一页')                self.ui.listWidget.setCurrentRow(self.ui.listWidget.count() - 1)                self.get_img()if __name__ == '__main__':    app = QApplication([])
# 设置fusion风格
app.setStyle('Fusion')
window = Test()
window.ui.show()
app.exec_()

最后

今天的分享到这里就完了,祝大家五一快乐鸭!!!

快看,这是我为你准备的Python爬取图片教程相关推荐

  1. Python爬虫,爬取快看漫画每日更新模块

    文章目录 前言 一.爬虫是什么? 二.使用步骤 1.引入库 2.文件夹准备 3.将列表存储为txt格式文件 4.爬取每日更新页面具体代码: 5.运行结果 总结 前言 根据基本的爬虫知识,爬取快看漫画每 ...

  2. 使用第三方SDK(如微信、qq、快看、头条等),调用接口405 Method Not Allowed

    使用第三方SDK(如微信.qq.快看.头条等),调用接口405 Method Not Allowed 错误描述:postman请求正常,但客户端调用后接口没有反应,但返回了405错误. 解决方法:第三 ...

  3. 快看漫画大数据平台的模型思维与用户增长实践

    本文根据快看漫画屈世超老师在DataFunTalk数据主题技术沙龙活动"大数据从底层处理到数据驱动业务"中分享的<大数据平台的模型思维与用户增长实践>编辑整理而成,在未 ...

  4. 月蚀动漫获快看漫画600万元A轮战略投资,走国漫精品化路线

    11月5日消息,月蚀动漫宣布获得快看漫画600万元A轮战略投资. 据了解,月蚀动漫曾于2017年1月获得原力创投的百万级种子轮投资,2018年1月获得英诺天使基金的百万级天使轮投资. 据月蚀动漫创始人 ...

  5. 靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...

    原标题:铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没? 无人飞机.无人驾驶.智能机器人.... 你能想象这些充满现代感的高科技 正在改变我们的生活吗? 在科技高速发展的今天 人工智能逐渐能够 ...

  6. 山东师范大学志愿推荐系统邀请码_快看点邀请码填写HGC1QK快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦...

    快看点邀请码填写HGC1QK 快看点邀请码填写HGC1QK快看点邀请码大家千万不要乱填写哦 快看点官网下载是一款非常好玩的软件,喜欢此类风格的用户可以体验一下哦. 快看点官网下载特色系统: 如此好玩的 ...

  7. 华科计算机复试ccf成绩,新鲜速递!刚拟录取华科学妹总结的复试攻略,快看

    原标题:新鲜速递!刚拟录取华科学妹总结的复试攻略,快看 今天给大家分享一位19考研学妹的面试经验,她报考华中科技大学,已拟录取! 复试已落幕,在火车上收到拟录取通知后,感觉自己就像一个凯旋而归的战士. ...

  8. 人人视频从 App Store 下架整改,并下线“快看”相关内容,网友:我追的剧怎么办?...

    今日,据多位网友爆料,人人视频已经从App Store下架,所有视频下架,并下线"快看"相关内容.相关话题迅速登上微博热搜. 对于此问题,小编去App Store下载发现的确已经搜 ...

  9. 快看漫画个性化推荐探索与实践.pdf(附下载链接)

    今天给大家分享<快看漫画个性化推荐探索与实践.pdf>,文末附下载链接. 更多细节请回复"9017",下载报告全文查看. 「 更多干货,更多收获 」 快看漫画个性化推荐 ...

最新文章

  1. 微信url schema,deep link
  2. python观察日志(part20)--列表中加号,extend,append之间的区别
  3. C++设计模式-职责链模式
  4. 基于图神经网络的节点表征学习
  5. rhel5.5下安装oracle10g报libXp.so.6错误
  6. un-app网易云歌词滚动功能
  7. flowable设计器节点属性扩展_gooflow设计器API说明书
  8. 《When Private Set Intersection Meets Big Data:An Efficient and Scalable Protocol》论文解读
  9. 百度、阿里、美团、头条…论剑AI,这里有开发者想知道的未来
  10. 聊聊Dubbo的注册中心、配置中心以及元数据中心
  11. PTF:一款多模块渗透测试框架
  12. 呼叫中心_VOIP技术介绍
  13. 目标检测的名词概念(持续记录中.....)
  14. android内核调试
  15. 做人最大的无知,是错把平台当本事(深度好文)
  16. 简单的tcpdump抓包使用总结:抓取指定ip、指定网卡、指定端口的包
  17. 2022最新微信小程序常见面试题总结
  18. ConcurrentHashMap线程安全的原因
  19. Cisco Packet Tracer的基本应用
  20. 原码、补码的除法运算

热门文章

  1. 数据结构课设:基于字符串模式匹配算法的病毒感染检测问题
  2. oracle 倒库详细步骤,新手倒车入库怎么操作 图文并茂详细讲解操作技巧
  3. 【随笔记】Deepin20系统更换fish,替代bash
  4. 学习Python一定要吃透这68个内置函数,强烈建议收藏(文末附本周送书和抽奖)...
  5. Cadence 简易使用教程
  6. word只能以安全模式打开
  7. 小米机器人 尘盒配件_小米机器人怎么取出尘盒
  8. pythoneducoder苹果梨子煮水的功效_苹果梨子煮水的功效是什么呢
  9. 文字转语音软件哪个好?这些软件值得收藏
  10. 51单片机串口通信(自动发送)