Python图片爬虫
1.今天给大家介绍自己写的一个图片爬虫,说白了就是从网页自动上下载需要的图片
2.首先选取目标为:http://www.zhangzishi.cc/涨姿势这个网站如下图,我们的目标就是爬取该网站福利社的所有美图

3.福利社地址为http://www.zhangzishi.cc/category/welfare,获取图片就是获取所有网站图片的url地址,首先
A.打开URL,获取html代码
def url_open(url):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read()
print('url_open')
return html
B.从html代码中摘取网页链接,返回的是一个列表
def page_htmls(url,count):
html = url_open(url).decode('utf-8')
pages = []
a = html.find('a target="_blank" href=')
i = 0
while a != -1:
i += 1
b = html.find('.html',a,a+200)
if b != -1:
pages.append(html[a+24:b+5])
else:
b = a + 24
a = html.find('a target="_blank" href=',b)
if i == count:
break
for each in pages:
print(each)
return pages
C.从每一个链接页中获取图片地址,我这用了两种方法
def find_imgs(url):
html = url_open(url).decode('utf-8')
imgs = [] a = html.find('img src=')
while a != -1:
b = html.find('.jpg',a,a+100)
if b != -1:
if html[a+9:b+4].find('http') == -1:
imgs.append('http:'+html[a+9:b+4])
else:
imgs.append(html[a+9:b+4])
else:
b = a + 9
a = html.find('img src=',b)
'''
for each in imgs:
print(each)
'''
return imgs def imgurl_get(url):
html = url_open(url).decode('utf-8')
imgurls = []
a = html.find('color: #555555;" src=')
while a != -1:
b = html.find('.jpg',a,a+100)
if b != -1:
imgurls.append('http:'+html[a+22:b+4])
else:
b = a + 22
a = html.find('color: #555555;" src=',b) return imgurls
D.根据图片url下载图片到文件
def save_imgs(folder,imgs):
for ea in imgs:
filename = ea.split('/')[-1]
with open(filename,'wb') as f:
img = url_open(ea)
f.write(img) def download_mm(folder='H:\\xxoo2',page_count = 100,count = 100):
main_url = 'http://www.zhangzishi.cc/category/welfare'
main_urls = []
for i in range(count):
main_urls.append(main_url+'/page/'+str(i+1))
os.mkdir(folder)
os.chdir(folder)
for url in main_urls:
htmls = page_htmls(url,page_count)
for page in htmls:
imgurls = imgurl_get(page) save_imgs(folder,imgurls)
E.开始下载
def download__img(folder='H:\\xxoo',page_count=100):
main_url = 'http://www.zhangzishi.cc/category/welfare'
os.mkdir(folder)
os.chdir(folder)
htmls = page_htmls(main_url,page_count)
for page in htmls:
imgs_url = find_imgs(page) save_imgs(folder,imgs_url) if __name__ == '__main__': download_mm()
#download__img()
F:下载结果

顺便附上全部代码:
import urllib.request
import os def url_open(url):
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')
response = urllib.request.urlopen(req)
html = response.read()
print('url_open')
return html def page_htmls(url,count):
html = url_open(url).decode('utf-8')
pages = []
a = html.find('a target="_blank" href=')
i = 0
while a != -1:
i += 1
b = html.find('.html',a,a+200)
if b != -1:
pages.append(html[a+24:b+5])
else:
b = a + 24
a = html.find('a target="_blank" href=',b)
if i == count:
break
for each in pages:
print(each)
return pages
''' '''
def find_imgs(url):
html = url_open(url).decode('utf-8')
imgs = [] a = html.find('img src=')
while a != -1:
b = html.find('.jpg',a,a+100)
if b != -1:
if html[a+9:b+4].find('http') == -1:
imgs.append('http:'+html[a+9:b+4])
else:
imgs.append(html[a+9:b+4])
else:
b = a + 9
a = html.find('img src=',b)
'''
for each in imgs:
print(each)
'''
return imgs def imgurl_get(url):
html = url_open(url).decode('utf-8')
imgurls = []
a = html.find('color: #555555;" src=')
while a != -1:
b = html.find('.jpg',a,a+100)
if b != -1:
imgurls.append('http:'+html[a+22:b+4])
else:
b = a + 22
a = html.find('color: #555555;" src=',b) return imgurls
'''
for each in imgurls:
print(each)
''' def save_imgs(folder,imgs):
for ea in imgs:
filename = ea.split('/')[-1]
with open(filename,'wb') as f:
img = url_open(ea)
f.write(img) def download_mm(folder='H:\\xxoo2',page_count = 100,count = 100):
main_url = 'http://www.zhangzishi.cc/category/welfare'
main_urls = []
for i in range(count):
main_urls.append(main_url+'/page/'+str(i+1))
os.mkdir(folder)
os.chdir(folder)
for url in main_urls:
htmls = page_htmls(url,page_count)
for page in htmls:
imgurls = imgurl_get(page) save_imgs(folder,imgurls) def download__img(folder='H:\\xxoo',page_count=100):
main_url = 'http://www.zhangzishi.cc/category/welfare'
os.mkdir(folder)
os.chdir(folder)
htmls = page_htmls(main_url,page_count)
for page in htmls:
imgs_url = find_imgs(page) save_imgs(folder,imgs_url) if __name__ == '__main__': download_mm()
#download__img()
Python图片爬虫的更多相关文章
- python 图片爬虫
#!/usr/bin/env python #coding:utf-8 import urllib import re def GetHtml(url): """获取HT ...
- python图片爬虫 - 批量下载unsplash图片
前言 unslpash绝对是找图的绝佳场所, 但是进网站等待图片加载真的令人捉急, 仿佛是一场拼RP的战争 然后就开始思考用爬虫帮我批量下载, 等下载完再挑选, 操作了一下不算很麻烦, 顺便也给大家提 ...
- python简易爬虫来实现自动图片下载
菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...
- Python爬虫02——贴吧图片爬虫V2.0
Python小爬虫——贴吧图片爬虫V2.0 贴吧图片爬虫进阶:在上次的第一个小爬虫过后,用了几次发现每爬一个帖子,都要自己手动输入帖子链接,WTF这程序简直反人类!不行了不行了得改进改进. 思路: 贴 ...
- python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)
python多线程爬虫项目() 爬取目标:斗图啦(起始url:http://www.doutula.com/photo/list/?page=1) 爬取内容:斗图啦全网图片 使用工具:requests ...
- 第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器
第三百四十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—编写spiders爬虫文件循环抓取内容—meta属性返回指定值给回调函数—Scrapy内置图片下载器 编写spiders爬虫文件循环 ...
- python网络爬虫之解析网页的正则表达式(爬取4k动漫图片)[三]
前言 hello,大家好 本章可是一个重中之重,因为我们今天是要爬取一个图片而不是一个网页或是一个json 所以我们也就不用用到selenium模块了,当然有兴趣的同学也一样可以使用selenium去 ...
- python网络爬虫之解析网页的BeautifulSoup(爬取电影图片)[三]
目录 前言 一.BeautifulSoup的基本语法 二.爬取网页图片 扩展学习 后记 前言 本章同样是解析一个网页的结构信息 在上章内容中(python网络爬虫之解析网页的正则表达式(爬取4k动漫图 ...
- Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片
Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片, ...
随机推荐
- [C#]使用Gembox.SpreadSheet向Excel写入数据及图表
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...
- PHP扩展开发 第一课 为什么要写扩展及hello world
PHP扩展开发其实很简单.那为什么要扩展开发呢. 这里咱们以实际的案例进行对比. 第一步,进入 php源码包 http://www.php20.com/forum.php?m ... =159&a ...
- nginx 配置入门
之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一头雾水. 今天看到个文档不错,翻译过来分享给大家,可以让新手更详细地了解nginx配置,可以说是nginx配 ...
- 分布式监控系统Zabbix3.2对数据库的连接数预警
在前篇分布式监控系统Zabbix3.2监控数据库的连接数 中已经对数据库的端口3306进行了监控,可以看到数据库的连接数历史变化有高有低,那如果达到了数据库连接数的阀值是不是主动通知给运维人员去检查问 ...
- Qt 显示图片的三种方法
一. 直接用QLabel显示原图 //单独显示的QLabel 其大小为内容即图片的大小,若将QLabel放入QMainWindow中则QLabel的大小为其初始大小. /* QLabel *label ...
- 如何设置html中img宽高相同-css
最近项目中有一个问题,做一个响应式的盒子,随着屏幕的变化, 宽高一直保持相等,之前一直使用js动态设置,获取盒子的宽度来设置盒子高度. 但是加载时样式显示不是很好,后来直接用css实现. html部分 ...
- BST性能分析&改进思路——平衡与等价
极端退化 前面所提到的二叉搜索树,已经为我们对数据集进行高效的静态和动态操作打开了一扇新的大门.正如我们所看到的,BST从策略上可以看作是将之前的向量(动态数组)和链表结构的优势结合起来,不过多少令我 ...
- java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230
近期遇到了如标题这种错误,再次记录解决方法.本文參考帖子: http://bbs.csdn.net/topics/390196217 出现此bug的原因是在内存回收上.里面用Bitamp的代码为: t ...
- 【特征匹配】BRISK原文翻译
原文:Stefan Leutenegger, Margarita Chli et al.<BRISK: Binary Robust Invariant Scalable Keypoints> ...
- Configuring WS-Security UsernameToken and WS-SecureConversation (Symmetric Connection Creation)
Context This procedure provides a detailed process of all necessary steps to secure Web Services wit ...