网页爬虫抓取百度图片(现阶段深度学习有关的安装对应版本介绍参考网站如下)

优采云 发布时间: 2022-01-26 02:08

  网页爬虫抓取百度图片(现阶段深度学习有关的安装对应版本介绍参考网站如下)

  2022-01-07

  我正忙着找工作,现阶段我在同一个家庭。诚然,同事都是老板,我讲解了很多关于深度学习的知识。不过,我是菜鸟,因为公司的人工智能工作需要更多的图片。而我目前只知道爬虫,所以现阶段由公司的爬虫负责抓图。当然,百度图片很好抓。我还写了一个很好的代码来捕获。如有需要,您可以留言。作者在这里提供了完整的代码,这里就不分享百度图片的截图了。谷歌图片爬虫的作者还是想在这里分享一下,因为毕竟我花了一点时间才做出来的。

  之所以要分享源码,是因为我发现网上关于爬取谷歌图片的介绍很少,而且有一个分享代码是加密收费mmp的。不要在意它是否有点低。废话不多说,直接说代码吧。

  准备一:

  对应版本的Chromedriver安装请参考网站如下:

  https://blog.csdn.net/yoyocat915/article/details/80580066 # 参考版本【转载yoyocat915】

http://chromedriver.storage.googleapis.com/index.html # 对应版本下载

  因为我之前的工作中没有硒,所以我今天才用它

  2. 准备2:

  上网准备,如果贵公司有,就不用买了。不想科学上网的可以去这个网站买一波广告。

  https://e.2333.tn/ #购买的过程在这里就不介绍了

  购买后调试。在这里,笔者被公司外网坑了不少。他直接提议在那儿坑,免得你被坑。

  第一步:先调试成全局模式,否则只有谷歌可以访问外网,所以不能用其他浏览器访问外网(个人理解)

  

  第 2 步:检查您使用的端口

  

  

  ok 到这里几步就可以开始编码了,接下来分析下如何使用selenium+chrome进行抓图。共享代码如下。如果你对selenium的使用不是很熟练,基础教程就不在这里分享了,因为我也在学习过程中。代码流共享如下:

  在此之前先介绍一下图片存储的用法:

  urllib.request.urlretrieve(图片的路径.jpg结尾\图片的base64编码,‘储存的位置)

可以参考博客:https://blog.csdn.net/wuguangbin1230/article/details/77680058

  好的初始代码版本 1.0

  import os

import time

import urllib

from scrapy import Selector

from selenium import webdriver

class GoogleImgCrawl:

def __init__(self):

self.browser = webdriver.Chrome('F:\MyDownloads\chromedriver.exe')

self.browser.maximize_window()

self.key_world = input('Please input the content of the picture you want to grab >:')

self.img_path = r'D:\GoogleImgDownLoad' # 下载到的本地目录

if not os.path.exists(self.img_path): # 路径不存在时创建一个

os.makedirs(self.img_path)

def start_crawl(self):

self.browser.get('https://www.google.com/search?q=%s' % self.key_world)

self.browser.implicitly_wait(3) # 隐形等待时间

self.browser.find_element_by_xpath('//a[@class="iu-card-header"]').click() # 找到图片的链接点击进去

time.sleep(3) # 休眠3秒使其加载完毕

img_source = self.browser.page_source

img_source = Selector(text=img_source)

self.img_down(img_source) # 第一次下载图片

self.slide_down() # 向下滑动继续加载图片

def slide_down(self):

for i in range(7, 20): # 自己可以任意设置

pos = i * 500 # 每次向下滑动500

js = "document.documentElement.scrollTop=%s" % pos

self.browser.execute_script(js)

time.sleep(3)

img_source = Selector(text=self.browser.page_source)

self.img_down(img_source)

def img_down(self, img_source):

img_url_list = img_source.xpath('//div[@class="THL2l"]/../img/@src').extract()

for each_url in img_url_list:

if 'https' not in each_url: #仅仅就第一页可以,其他误判这个代码不是完整的是作者的错代码。

# print(each_url)

each_img_source = urllib.request.urlretrieve(each_url,

'%s/%s.jpg' % (self.img_path, time.time())) # 储存图片

if __name__ == '__main__':

google_img = GoogleImgCrawl()

google_img.start_crawl()

  这里遇到的坑如下:

  截图一:

  

  前20张图片的src显示的是base64编码,所以可以直接用上面的代码解决,但是你后面的图片的src是什么?如下所示

  

  这里既不是 base64 也不是 .jpg。我如何在这里保存它?你用

   self.browser.get(图片的地址)

img_source = self.browser.page_source

  继续经历这个?如果你这样想,那你就错了,因为我们还是拿到了完整的页面,那么这个时候我们该怎么办呢?想到我们最初使用requests来请求图片地址,这时候作者就简单的尝试着拿出一个单独的图片src去请求,不加代理就错了。因此,添加代理会导致以下结果:

  import time

import requests

proxy = {"https": "https://127.0.0.1:8787"} //端口作者在前边的坑已经介绍了需要外网的端口

response = requests.get(

'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTwwkW09Hrnq5DOzSYAKqrxv3uGjbQzoCRP28AOF03pzJ2uFObS',

proxies=proxy, verify=False)

with open('./image%s.jpg' % time.time(), 'wb')as f:

f.write(response.content)

  结果就是想要的结果

  

  那么你知道如何修改上面的代码吗?哈哈哈可能有点乱

  修改代码如下:

  import os

import time

import urllib

import requests

from scrapy import Selector

from selenium import webdriver

class GoogleImgCrawl:

def __init__(self):

self.proxy = {"https": "https://127.0.0.1:8787"} #初始化代理

self.browser = webdriver.Chrome('F:\MyDownloads\chromedriver.exe')

self.browser.maximize_window() #最大的适应屏幕

self.key_world = input('Please input the content of the picture you want to grab >:')

self.img_path = r'D:\GoogleImgDownLoad' # 下载到的本地目录

if not os.path.exists(self.img_path): # 路径不存在时创建一个

os.makedirs(self.img_path)

def start_crawl(self):

self.browser.get('https://www.google.com/search?q=%s' % self.key_world)

self.browser.implicitly_wait(3) # 隐形等待时间

self.browser.find_element_by_xpath('//a[@class="iu-card-header"]').click() # 找到图片的链接点击进去

time.sleep(3) # 休眠3秒使其加载完毕

img_source = self.browser.page_source

img_source = Selector(text=img_source)

self.img_down(img_source) # 第一次下载图片

self.slide_down() # 向下滑动继续加载图片

def slide_down(self):

for i in range(7, 20): # 自己可以任意设置

pos = i * 500 # 每次向下滑动500

js = "document.documentElement.scrollTop=%s" % pos

self.browser.execute_script(js)

time.sleep(3)

img_source = Selector(text=self.browser.page_source)

self.img_down(img_source)

def img_down(self, img_source):

img_url_list = img_source.xpath('//div[@class="THL2l"]/../img/@src').extract()

for each_url in img_url_list:

if 'https' not in each_url:

# print(each_url)

each_img_source = urllib.request.urlretrieve(each_url,

'%s/%s.jpg' % (self.img_path, time.time())) # 储存图片

else: #在这里添加一个不久行了吗?如果图片的链接不是base64的

response = requests.get(each_url,proxies=self.proxy, verify=False)

with open('D:\GoogleImgDownLoad\%s.jpg' % time.time(), 'wb')as f:

f.write(response.content)

if __name__ == '__main__':

google_img = GoogleImgCrawl()

google_img.start_crawl()

  以上就是分享的结束。当然,直接使用requests模块+代理更方便。百度的爬虫这里就不分享了。如果你想联系源代码的作者,我会分享给你。当然,美中不足的是,这里不需要对图片进行去重,非常简单。不知道你有没有什么想法。无论如何,作者在这里有想法。已经是深夜了,我们睡个午觉吧。

  分类:

  技术要点:

  相关文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线