今天我们来爬取另外个网站https://photo.fengniao.com 没错就是这个地址,不用翻其他的标签栏,,这个网站最大的特点就是一直往下翻都会有一个加载的操作,不断加载新的图片上去。可以试着滑动鼠标不断往下翻,不断往下翻,不断往下翻。。。。

总之啊,天荒地老海枯石烂啊,今天我们试着两种不同的方式来搞定它。下一博文写另外一种方法来搞定。

在“图库”有多的子标签,按照子标签进一步划分。
每到一个子标签,点击第一张图片进去。

会发现这里又查看原图,下一页等信息,都是可以做直接抓取的。

而且按照这个下一页的三角箭头,可以一直一直翻看后面的照片,很爽啊。于是一个大大的while循环就会出现了。

完整代码如下:

# coding: utf-8
from concurrent.futures import ThreadPoolExecutor
import time
import os
import requests
from bs4 import BeautifulSoup
from selenium import webdriverfrom selenium.webdriver.chrome.options import  Optionsrootrurl = 'https://photo.fengniao.com'
save_dir = 'D:/estimages/'
chromeExeLoc = 'D:/software/chrome/chromedriver_win32/chromedriver.exe'headers = {"Referer": rootrurl,'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",'Accept-Language': 'en-US,en;q=0.8','Cache-Control': 'max-age=0','Connection': 'keep-alive'
}  ###设置请求的头部,伪装成浏览器def saveOneImg(dir, img_url):new_headers = {"Referer": img_url,'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",'Accept-Language': 'en-US,en;q=0.8','Cache-Control': 'max-age=0','Connection': 'keep-alive'}  ###设置请求的头部,伪装成浏览器,实时换成新的 header 是为了防止403 http code问题,防止反盗链,try:img = requests.get(img_url, headers=new_headers)  # 请求图片的实际URLif (str(img).find('200') > 1):with open('{}/{}.jpg'.format(dir, img_url.split('/')[-1]), 'wb') as jpg:  # 请求图片并写进去到本地文件jpg.write(img.content)print(img_url)jpg.close()return Trueelse:return Falseexcept Exception as e:print('exception occurs: ' + img_url)print(e)return Falsedef saveOnePageFunc(dir, url):tmpUrl = urlidx = 1while 1:html = BeautifulSoup(requests.get(tmpUrl, headers=headers).text, features="html.parser")imgUrl = html.find('a', {'class' : 'downPic'}).get('href')imgText = html.find('h3').stringsaveOneImg(dir, imgUrl)tmpUrl = html.find('a', {'class' : 'right btn'}).get('href')if tmpUrl.find('html') < 0:breaktmpUrl = rootrurl + tmpUrlidx = idx + 1print('this tag is over.')# 单个spider thread
def tagSpider(tag, url):# 按照tag和图片组的内容来创建目录new_dir = '{}/{}'.format(save_dir, tag)if not os.path.exists(new_dir):os.makedirs(new_dir)html = BeautifulSoup(requests.get(url, headers=headers).text, features="html.parser")firstImgUrl = html.find('div', {'class' : 'picList'}).find('li').find('a').get('href')saveOnePageFunc(new_dir, rootrurl + firstImgUrl)def getAllTags():list = {}html = BeautifulSoup(requests.get(rootrurl, headers=headers).text, features="html.parser")a_s = html.find('div', {'class' : 'menuPic'}).find_all('a')for a in a_s:list[a.get_text()[:-1]] = a.get('href')return listif __name__ == '__main__':# # 获得所有标签taglist = getAllTags()print(taglist)## 给每个标签配备一个线程with ThreadPoolExecutor(max_workers=15) as t:  # 创建一个最大容纳数量为20的线程池for tag, url in taglist.items():t.submit(tagSpider, tag, url)# 单个连接测试下下# tagSpider('其他', 'http://photo.fengniao.com/f_999.html')# 等待所有线程都完成。while 1:print('-------------------')time.sleep(1)

效果如下:

Python《搞事情==蜂-鸟-图-片(一)》相关推荐

  1. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

  2. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...

  3. 【Kaggle Learn】Python 5-8

    五. Booleans and Conditionals Using booleans for branching logic x = True print(x) print(type(x))''' ...

  4. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  5. 使用python愉快地做高数线代题目~

    今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...

  6. python 位运算与等号_Python 运算符

    和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...

  7. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  8. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  9. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

  10. Python gRPC 安装

    1. 安装依赖库 sudo pip3 install grpcio sudo pip3 install protobuf sudo pip3 install grpcio_tools 2. 生成对应文 ...

最新文章

  1. 基于wincc的虚拟电梯设计_基于WINCC的模拟电梯设计
  2. 从Linux上查看接口路由IP(吓一跳ip)
  3. 转载:逻辑思维提升表达
  4. matlab神经网络4:数据聚类-自组织映射
  5. 交叉线和直通线各自用于什么场合?为什么?_【小麓讲堂】偏振光与LCD、OLED、3D、AR到底有什么关系?...
  6. 3月19日学习内容整理:redis
  7. linux下mono播放PCM音频
  8. Industroyer:自震网病毒以来对工控系统的最大威胁
  9. Unity 实现人物移动
  10. 小程序长按识别公众号二维码-已实现
  11. 2021年数学建模国赛湖北赛区推荐国奖名单
  12. Android识别字符串中的简体和繁体字
  13. 一些好用的Linux命令工具
  14. 蜜罐天堂Honeydrive的部署和Dionaea的试运行
  15. 线段树(区间修改)模板题 Luogu 2357 守墓人
  16. 详解:动态规划算法【Java实现】——背包问题
  17. 免费下载pdf阅读器
  18. Windows下启动Redis失败,报错creating server tcp listening socket 127.0.0.1:6379: bind No error
  19. Linux C小项目 —— 聊天室
  20. 最新深度技术GHOST XP系统旗舰增强版 V2016年

热门文章

  1. TextBox控件的DataBindings属性
  2. webpack2 实践系列(二)— entry 和 output
  3. 基础学习笔记之opencv(14):随机数发生器绘制文字
  4. Design-patterns-JS:用JavaScript实现23种设计模式
  5. ZooKeeper程序员指南--使用ZooKeeper开发分布式应用程序
  6. mac系统升级后使用gitxcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), miss
  7. 内网穿透工具 Ngrok
  8. BGP——本地始发选路+AS-PATH选路(讲解+命令)
  9. OSPF——GRE Tunnel(含配置命令)详解
  10. android sdk与adt版本,eclipse中sdk与adt版本不兼容该怎么解决? 三种方法帮你搞定