转载请注明出处:
http://blog.csdn.net/Hk_john/article/details/78455889
给出完整代码:(请需要的自行下载,有问题请留言)
http://download.csdn.net/download/hk_john/10105643
pudn下载连接:
http://www.pudn.com/Download/item/id/3304126.html
有时间会写一下百度图片和谷歌图片的python爬虫博客,先占行
google图片爬虫连接:
http://blog.csdn.net/Hk_john/article/details/78581748
百度图片爬虫连接:

这段时间在实习,在做一些各大网站图片爬取的工作,基本告一段落,现在分别对百度图片,google图片,并应(Bing)图片三个网站的图片搜索结果进行爬取和下载。
首先通过爬虫过程中遇到的问题,总结如下:
1、一次页面加载的图片数量各个网站是不定的,每翻一页就会刷新一次,对于数据量大的爬虫几乎都需要用到翻页功能,有如下两种方式:
1)通过网站上的网址进行刷新,例如必应图片:

url = 'http://cn.bing.com/images/async?q={0}&first={1}&count=35&relp=35&lostate=r
&mmasync=1&dgState=x*175_y*848_h*199_c*1_i*106_r*0'

2)通过selenium来实现模拟鼠标操作来进行翻页,这一点会在Google图片爬取的时候进行讲解。
2、每个网站应用的图片加载技术都不一样,对于静态加载的网站爬取图片非常容易,因为每张图片的url都直接显示在网页源码中,找到每张图片对应的url即可使用urlretrieve()进行下载。然而对于动态加载的网站就比较复杂,需要具体问题具体分析,例如google图片每次就会加载35张图片(只能得到35张图片的url),当滚动一次后网页并不刷新但是会再次加载一批图片,与前面加载完成的都一起显示在网页源码中。对于动态加载的网站我推荐使用selenium库来爬取。

对于爬取图片的流程基本如下(对于可以通过网址实现翻页或者无需翻页的网站):
1. 找到你需要爬取图片的网站。(以必应为例)


2. 使用google元素检查(其他的没用过不做介绍)来查看网页源码。


3. 使用左上角的元素检查来找到对应图片的代码。


4. 通过观察找到翻页的规律(有些网站的动态加载是完全看不出来的,这种方法不推荐)


从图中可以看到标签div,class=’dgControl hover’中的data-nexturl的内容随着我们滚动页面翻页first会一直改变,q=二进制码即我们关键字的二进制表示形式。加上前缀之后由此我们才得到了我们要用的url。
5. 我们将网页的源码放进BeautifulSoup中,代码如下:

url = 'http://cn.bing.com/images/async?q={0}&first={1}&count=35&relp=35&lostate=r&mmasync=1&dgState=x*175_y*848_h*199_c*1_i*106_r*0'
agent = {'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.165063 Safari/537.36 AppEngine-Google."}
page1 = urllib.request.Request(url.format(InputData, i*35+1), headers=agent)
page = urllib.request.urlopen(page1)
soup = BeautifulSoup(page.read(), 'html.parser')

我们得到的soup是一个class ‘bs4.BeautifulSoup’对象,可以直接对其进行操作,具体内容自行查找。
首先选取我们需要的url所在的class,如下图:

波浪线是我们需要的url。
我们由下面的代码得到我们需要的url:

if not os.path.exists("./" + word):#创建文件夹os.mkdir('./' + word)for StepOne in soup.select('.mimg'):link=StepOne.attrs['src']#将得到的<class 'bs4.element.Tag'>转化为字典形式并取src对应的value。count = len(os.listdir('./' + word)) + 1SaveImage(link,word,count)#调用函数保存得到的图片。

最后调用urlretrieve()函数下载我们得到的图片url,代码如下:

 try:time.sleep(0.2)urllib.request.urlretrieve(link,'./'+InputData+'/'+str(count)+'.jpg')except urllib.error.HTTPError as urllib_err:print(urllib_err)except Exception as err:time.sleep(1)print(err)print("产生未知错误,放弃保存")else:print("图+1,已有" + str(count) + "张图")

这里需要强调是像前面的打开网址和现在的下载图片都需要使用try except进行错误测试,否则出错时程序很容易崩溃,大大浪费了数据采集的时间。
以上就是对单个页面进行数据采集的流程,紧接着改变url中{1}进行翻页操作继续采集下一页。
数据采集结果如下:

有问题请留言。
转载请注明出处:
http://blog.csdn.net/Hk_john/article/details/78455889
数据采集的速度和成功率非常依赖网络,请选择网络良好的时候进行采集,同时限制自己的采集速度,避免给被爬网站造成网络负担(建议夜间进行),遵守网络规章。

PYTHON爬虫——必应图片关键词爬取相关推荐

  1. python爬虫百度图片_python3爬取百度图片(2018年11月3日有效)

    最终目的:能通过输入关键字进行搜索,爬取相应的图片存储到本地或者数据库 首先打开百度图片的网站,搜索任意一个关键字,比如说:水果,得到如下的界面 分析: 1.百度图片搜索结果的页面源代码不包含需要提取 ...

  2. python爬虫好友图片_Python爬取所有微信好友头像,制作微信好友图片墙

    今天咱就试试怎么爬取微信列表中所有好友的头像,并做成一张图片墙,代码不长,60 行就可以搞定. 核心是利用三个库:wxpy 库,用于获取好友头像然后下载 Pillow 库,用于拼接头像 Pyinsta ...

  3. python爬虫微博图片_python爬取微博图片及内容

    import random import urllib.request import json import re import requests import time id=(input(&quo ...

  4. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  5. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  6. Python爬虫实战一之爬取糗事百科段子

    点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...

  7. Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  8. python爬虫实例之小说爬取器

    今天和大家分享一个爬取盗版小说的实例. 如今的网络小说可谓是百家齐放各领风骚,玄幻科幻穿越修仙都市- 各种套路看得我是心潮澎湃,笔者曾经也蛮喜欢看小说的,以前经常是拿着一台诺基亚看到深夜,第二天带着黑 ...

  9. python爬虫对炒股有没有用_使用python爬虫实现网络股票信息爬取的demo

    实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url ...

最新文章

  1. 算法设计与分析 搜索第k元
  2. android adb 命令源码解析
  3. JSONSerialization.ReadingOption详解
  4. windows 远程连接debian_用Windows的远程桌面连接访问Debian和Ubuntu图形界面
  5. 2018/Province_Java_C/2/猴子分香蕉
  6. SAP Fiori Service Modeler
  7. D - Yet Another Problem On a Subsequence CodeForces - 1000D (DP,组合数学)
  8. LeetCode 426. 将二叉搜索树转化为排序的双向链表(BST中序循环遍历)
  9. 五大原则让你的代码不再受bug的困扰
  10. 服务器升级中暂不可修改怎么回事,抖音服务器升级中,暂不支持本地区开播抖音怎么在法国直播?...
  11. 凯恩帝k1000ti参数设置_KND1000TI系统参数 - 图文 -
  12. jdk,j2sdk,j2eesdk,jre 的区别和联系
  13. JS图片压缩+图片上传前检测类型、大小、尺寸
  14. HTTP 状态码502 深度解析
  15. java高德地图urlapi_高德地图POI采集(URL-API)
  16. PostgreSQL重启恢复---XLOG 2.0
  17. 视频剪辑用计算机,用于视频剪辑的笔记本电脑,我们都有哪些选择
  18. 程序员经常看的开源月刊《HelloGitHub》第 56 期
  19. 煤炭企业内部调拨物资称重问题如何管理(一)
  20. Zcash 对以太坊来说意味着什么?

热门文章

  1. 锦湖和韩泰轮胎哪个好?你不知道的都在这儿
  2. 测试员在面试中被问到 “你对加班的看法” 该如何回答?
  3. Markdown公式笔记(二):累加累乘和积分求导
  4. 企业变更了经营范围,需要去企业信用信息公示吗?
  5. vsftpd 创建虚拟用户,添加黑名单 常见550 500报错解决方案
  6. 手把手教你如何在安卓中使图片进行旋转
  7. I3C总线HDR模式研读
  8. 0293是c语言常量,请问如何把一个C语言转换成汇编语言?
  9. 淘沙河 - 清凉解暑之电风扇
  10. ElementUI离线下载和使用