toolkit-frame之toolkit-sprider(数据采集)---百度图片

简介: toolkit-frame之toolkit-sprider(数据采集)---百度图片

没写好!有点瑕疵!可以根据任意关键字采集检索的图片!

使用的技术:

Python3.7 、selenium  3.141.0 及Google浏览器的插件。

为啥使用selenium 包呢?主要是因为百度检索出来的图片页面是ajax的。传统的bs4等包根本获取不到html的dom结构,无法进行UI层面的采集。selenium包解决了这个问题。

其中:

1、BaseFrame.__log__("开始采集中国船舶网的数据...") BaseFrame.__log__() 就是我个人封装的日之类替换成print就可以。

2、response = requests.get(self.base_url, timeout=30, headers=UserAgent().get_random_header(self.base_url)) 这个就是封装的一个随机header,防止被认为是机器,每次都模拟一个新的浏览器的header。代码是这个:UserAgent().get_random_header(self.base_url) 随机header类:

3、filepath = BaseConfig().CORPUS_ROOT + os.sep + "equipment_info.xlsx" 这个就是文件的路径BaseConfig().CORPUS_ROOT替换成自己的文件路径就可以了。

4、mmEntity = SpriderEntity() 这个就是一个实体类用来记录采集过的数据,程序可以多次执行。防止数据重复采集的策略。


不废话了直接上代码:

import os
import requests
import ssl
import time
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from sprider.access.SpriderAccess import SpriderAccess
from main.base.BaseConfig import BaseConfig
from main.base.BaseFrame import BaseFrame
from sprider.object.SpriderEntity import SpriderEntity
from main.plugin.Tools import Tools
class SpriderSearchImage():
    page_count = 1  # 每个栏目开始业务
    base_url = "http://image.baidu.com/search/index"  # 采集的网址
    save_path = BaseConfig().CORPUS_ROOT + os.sep + "Baidu"
    dict_column_list = ["骏马"]
    sprider_count = 100
    window_height = 30000
    def __init__(self, path):
        Tools.judge_diskpath_exits_create(self.save_path)
        pass
    def sprider(self, key_word, sprider_count):
        search_url = self.base_url + "?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=index&fr=&hs=0&xthttps=111111&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word={0}&oq={0}&rsp=-1"
        search_url = search_url.format(key_word)
        print(search_url)
        BaseFrame.__log__("开始采集采用Google浏览器的静默模式")
        BaseFrame.__log__("开始采集" + self.base_url + "上的图片,关键字是:" + key_word)
        ssl._create_default_https_context = ssl._create_unverified_context
        option = webdriver.ChromeOptions()
        option.add_argument('headless')
        driver = webdriver.Chrome(chrome_options=option)
        driver.set_window_size(1024, self.window_height)
        driver.implicitly_wait(10)  # 这里设置智能等待10s
        BaseFrame.__log__("延迟加载10s,请等待")
        try:
            driver.get(search_url)
        except TimeoutException:
            driver.execute_script("window.stop()")  # 当页面加载时间超过设定时间,通过js来stop,即可执行后续动作
        self.item_list = driver.find_elements_by_css_selector(".imgitem")
        self.total_count = len(self.item_list)  # 第一次加载到的图片数量
        BaseFrame.__log__("本次共获取到" + str(self.total_count) + "个图片")
        total_index = 1
        self.range = range(self.total_count)
        image_index = 0
        while True:
            image_index = image_index + 1
            image = self.item_list[image_index - 1]
            image_url = image.get_attribute("data-objurl")
            image_title = image.get_attribute("data-title").replace("<strong>", "").replace("</strong>", "")
            BaseFrame.__log__("正在下载第" + str(image_index) + "张图片,标题是" + image_title + "")
            picEntity = SpriderEntity()  # 依据图片执行,下载过的图片不再下载
            picEntity.sprider_base_url = self.base_url
            picEntity.create_datetime = Tools.get_current_datetime()
            picEntity.sprider_url = image_url
            picEntity.sprider_pic_title = image_title
            picEntity.sprider_pic_index = str(image_index)
            if SpriderAccess().query_sprider_entity_by_urlandtitle(image_url, image_title) is None:
                SpriderAccess().save_sprider(picEntity)
                self.down_picture(image_url, image_title, key_word)
            if image_index + 1 == self.total_count and self.total_count < self.sprider_count:
                print("第" + str(total_index) + "次")
                driver.execute_script("window.scrollBy(" + str(self.window_height * total_index) + "," + str(
                    self.window_height * (1 + total_index)) + ")")
                self.item_list = driver.find_elements_by_css_selector(".imgitem")
                self.total_count = len(self.item_list)
                total_index = total_index + 1
                if image_index == self.total_count:  # 采集的数量够了
                    BaseFrame.__log__("采集完毕!")
                    break
    # region 下载图片
    def down_picture(self, pic_url, pic_title, folder):
        BaseFrame.__log__("正在下载" + pic_url)
        try:
            headers = {"Referer": pic_url,
                       'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
                                     '(KHTML, like Gecko)Chrome/62.0.3202.94 Safari/537.36'}
            content = requests.get(pic_url, headers=headers, timeout=10)
            real_path = self.save_path + os.sep + folder + os.sep
            if (os.path.exists(real_path) is False):
                os.makedirs(real_path)
            if content.status_code == 200:
                BaseFrame.__log__("读取图片成功")
                pic_cun = real_path + pic_title + '.jpg'
                fp = open(pic_cun, 'wb')
                fp.write(content.content)
                fp.close()
            else:
                BaseFrame.__err__("读取图片出现错误")
        except Exception as e:
            BaseFrame.__err__("下载图片过程出现错误" + str(e))
            return
        pass
        # endregion
    # endregion
if __name__ == '__main__':
    SpriderSearchImage(BaseConfig().CORPUS_ROOT).sprider("汗血马", 1000)

截图欣赏:

 

 

目录
相关文章
|
5月前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:Core Image 框架的应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能,对于提升用户体验和扩展应用程序能力至关重要。苹果公司的iOS平台提供了强大的Core Image框架,它允许开发者以高效和直观的方式执行复杂的图像处理任务。本文将深入探讨Core Image框架的关键特性,并通过实例演示如何在iOS应用中集成实时图像处理功能,不仅提高性能,同时保持了电池寿命的优化。我们将重点讨论面部识别、滤镜应用和性能优化等关键技术点,为读者提供一份全面的iOS图像处理指南。
|
5月前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:使用 Core Image 和 Metal 进行高效滤镜应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能是现代应用程序开发中的一个关键需求。苹果的iOS平台提供了Core Image和Metal两大技术,它们为开发者提供了强大的工具来实现复杂的图像处理任务。本文将探讨如何使用Core Image进行基础图像处理,并结合Metal的性能优势,开发出一个自定义的实时图像滤镜。我们将通过创建一个能够动态调整参数并且具有实时反馈效果的滤镜来演示这一过程。
|
5月前
|
数据采集 人工智能 自然语言处理
toolkit-frame(实用框架)
toolkit-frame(实用框架)
31 0
|
5月前
|
数据采集
toolkit-frame之toolkit-sprider(数据采集)---笔趣阁小说
toolkit-frame之toolkit-sprider(数据采集)---笔趣阁小说
73 1
|
5月前
|
数据采集
toolkit-frame之toolkit-sprider(数据采集)---中国船舶网
toolkit-frame之toolkit-sprider(数据采集)---中国船舶网
31 1
|
12月前
|
计算机视觉 开发者 C++
实用分享-Visual Studio图像查看插件(Image Watch)
实用分享-Visual Studio图像查看插件(Image Watch)
296 0
|
Oracle 关系型数据库 开发工具
快速预览工具——Wlx2Explore入门
Windows下快速预览工具,Wlx2Explorer,比 QuickLook 更快
445 0
快速预览工具——Wlx2Explore入门
|
编解码 定位技术
Planet比Google earth更好用的地图下载神器Basemaps Viewer不用写代码全球高清影像框选下载tif格式
Planet比Google earth更好用的地图下载神器Basemaps Viewer不用写代码全球高清影像框选下载tif格式
628 0
Planet比Google earth更好用的地图下载神器Basemaps Viewer不用写代码全球高清影像框选下载tif格式
|
存储 缓存 数据可视化
Core Image:iOS图像处理技术追踪
Core Image是苹果官方提供的图像处理框架,通过丰富的built-in(内置)或自定义Filter(过滤器)高效处理静态图片、动态图片或视频。开发者还可以通过构造Filter链或自定义Core Image Kernel来实现更丰富的效果。 在WWDC20中,苹果官方针对Core Image技术在以下三方面做了优化:Core Image对视频/动图的支持、基于Metal构建Core Image (CI) Kernel以及Core Image的Debug支持。 这三方面会在下文逐一提到,文末笔者也会浅谈Core Image在手淘图片库中的应用可能以及对Core Image技术的展望。
1888 0
Core Image:iOS图像处理技术追踪