[python学习] 简单爬取图片网站图库中图片
最近老师让学习Python与维基百科相关的知识,无聊之中用Python简单做了个爬取“游讯网图库”中的图片,因为每次点击下一张感觉非常浪费时间又繁琐。主要分享的是如何爬取HTML的知识和Python如何下载图片;希望对大家有所帮助,同时发现该网站的图片都挺精美的,建议阅读原网下载图片,支持游讯网不要去破坏它。
通过浏览游讯网发现它的图库URL为,其中全部图片为0_0_1到0_0_75:
http://pic.yxdown.com/list/0_0_1.html
http://pic.yxdown.com/list/0_0_75.html
同时通过下图可以发现游讯网的1-75页个列表,每页中有很多个主题,每个主题都有相应的多张图片。
(需在本地创建E:\\Picture3文件夹和Python运行目录创建yxdown文件夹)
# coding=utf-8
# 声明编码方式 默认编码方式ASCII 参考https://www.python.org/dev/peps/pep-0263/
import urllib
import time
import re
import os'''
Python下载游迅网图片 BY:Eastmount
''''''
**************************************************
#第一步 遍历获取每页对应主题的URL
#http://pic.yxdown.com/list/0_0_1.html
#http://pic.yxdown.com/list/0_0_75.html
**************************************************
'''
fileurl=open('yxdown_url.txt','w')
fileurl.write('****************获取游讯网图片URL*************\n\n')
#建议num=3 while num<=3一次遍历一个页面所有主题,下次换成num=4 while num<=4而不是1-75
num=3
while num<=3:temp = 'http://pic.yxdown.com/list/0_0_'+str(num)+'.html'content = urllib.urlopen(temp).read()open('yxdown_'+str(num)+'.html','w+').write(content)print tempfileurl.write('****************第'+str(num)+'页*************\n\n')#爬取对应主题的URL#<div class="cbmiddle"></div>中<a target="_blank" href="/html/5533.html" >count=1 #计算每页1-75中具体网页个数res_div = r'<div class="cbmiddle">(.*?)</div>' m_div = re.findall(res_div,content,re.S|re.M)for line in m_div:#fileurl.write(line+'\n')#获取每页所有主题对应的URL并输出if "_blank" in line: #防止获取列表list/1_0_1.html list/2_0_1.html#获取主题fileurl.write('\n\n********************************************\n')title_pat = r'<b class="imgname">(.*?)</b>'title_ex = re.compile(title_pat,re.M|re.S)title_obj = re.search(title_ex, line)title = title_obj.group()print unicode(title,'utf-8')fileurl.write(title+'\n')#获取URLres_href = r'<a target="_blank" href="(.*?)"'m_linklist = re.findall(res_href,line)#print unicode(str(m_linklist),'utf-8')for link in m_linklist:fileurl.write(str(link)+'\n') #形如"/html/5533.html"'''**************************************************#第二步 去到具体图像页面 下载HTML页面#http://pic.yxdown.com/html/5533.html#p=1#注意先本地创建yxdown 否则报错No such file or directory**************************************************'''#下载HTML网页无原图 故加'#p=1'错误#HTTP Error 400. The request URL is invalid.html_url = 'http://pic.yxdown.com'+str(link)print html_urlhtml_content = urllib.urlopen(html_url).read() #具体网站内容#可注释它 暂不下载静态HTMLopen('yxdown/yxdown_html'+str(count)+'.html','w+').write(html_content)'''#第三步 去到图片界面下载图片#图片的链接地址为http://pic.yxdown.com/html/5530.html#p=1 #p=2#点击"查看原图"HTML代码如下#<a href="javascript:;" style=""onclick="return false;">查看原图</a>#通过JavaScript实现 而且该界面存储所有图片链接<script></script>之间#获取"original":"http://i-2.yxdown.com/2015/3/18/6381ccc..3158d6ad23e.jpg"'''html_script = r'<script>(.*?)</script>'m_script = re.findall(html_script,html_content,re.S|re.M)for script in m_script:res_original = r'"original":"(.*?)"' #原图m_original = re.findall(res_original,script)for pic_url in m_original:print pic_urlfileurl.write(str(pic_url)+'\n')'''#第四步 下载图片#如果浏览器存在验证信息如维基百科 需添加如下代码class AppURLopener(urllib.FancyURLopener):version = "Mozilla/5.0"urllib._urlopener = AppURLopener()#参考 http://bbs.csdn.net/topics/380203601#http://www.lylinux.org/python使用多线程下载图片.html'''filename = os.path.basename(pic_url) #去掉目录路径,返回文件名#No such file or directory 需要先创建文件Picture3urllib.urlretrieve(pic_url, 'E:\\Picture3\\'+filename)#http://pic.yxdown.com/html/5519.html#IOError: [Errno socket error] [Errno 10060] #只输出一个URL 否则输出两个相同的URLbreak #当前页具体内容个数加1count=count+1time.sleep(0.1) else:print 'no url about content'time.sleep(1) num=num+1
else:print 'Download Over!!!'
1.简单遍历网站,获取每页对应主题的URL。其中每页都有无数个主题,其中主题的格式如下:
<!-- 第一步 爬取的HTML代码如下 -->
<div class="conbox"><div class="cbtop"></div><div class="cbmiddle"><a target="_blank" href="/html/5533.html" class="proimg"><img src="http://i-2.yxdown.com/2015/3/19/KDE5Mngp/a78649d0-9902-4086-a274-49f9f3015d96.jpg" alt="Miss大小姐驾到!细数《英雄联盟》圈的电竞女神" /><strong></strong><p><span>b></b>1836人看过</span><em><b></b>10张</em></p><b class="imgname">Miss大小姐驾到!细数《英雄联盟》圈的电竞女神</b></a><a target="_blank" href="/html/5533.html" class="plLink"><em>1</em>人评论</a></div><div class="cbbottom"></div><a target="_blank" class="plBtn" href="/html/5533.html"></a>
</div>
它是由无数个<div class="conbox"></div>组成,其中我们只需要提取<a target="_blank" href="/html/5533.html" class="proimg">中的href即可,然后通过URL拼接实现到具体的主题页面。其中对应上面的布局如下图所示:
http://pic.yxdown.com/html/5533.html#p=1
同时下载本地HTML页面可以注释该句代码。此时需要点击“查看图片”才能下载原图,点击右键只能另存为网站html。
<a href="javascript:;" οnclick="return false;" id="photoOriginal">查看原图</a>
同时它把所有图片都写在下面代码<script></script>中:
<script>var images = [
{ "big":"http://i-2.yxdown.com/2015/3/18/KDkwMHgp/6381ccc0-ed65-4422-8671-b3158d6ad23e.jpg","thumb":"http://i-2.yxdown.com/2015/3/18/KHgxMjAp/6381ccc0-ed65-4422-8671-b3158d6ad23e.jpg","original":"http://i-2.yxdown.com/2015/3/18/6381ccc0-ed65-4422-8671-b3158d6ad23e.jpg","title":"","descript":"","id":75109},
{ "big":"http://i-2.yxdown.com/2015/3/18/KDkwMHgp/fec26de9-8727-424a-b272-f2827669a320.jpg","thumb":"http://i-2.yxdown.com/2015/3/18/KHgxMjAp/fec26de9-8727-424a-b272-f2827669a320.jpg","original":"http://i-2.yxdown.com/2015/3/18/fec26de9-8727-424a-b272-f2827669a320.jpg","title":"","descript":"","id":75110},
...
</script>
其中获取原图-original即可,缩略图-thumb,大图-big,通过正则表达式下载URL:
res_original = r'"original":"(.*?)"' #原图
m_original = re.findall(res_original,script)
4.最后一步就是下载图片,其中我不太会使用线程,只是简单添加了time.sleep(0.1) 函数。下载图片可能会遇到维基百科那种访问受限,需要相应设置,核心代码如下:
import os
import urllib
class AppURLopener(urllib.FancyURLopener):version = "Mozilla/5.0"
urllib._urlopener = AppURLopener()
url = "http://i-2.yxdown.com/2015/2/25/c205972d-d858-4dcd-9c8b-8c0f876407f8.jpg"
filename = os.path.basename(url)
urllib.urlretrieve(url , filename)
同时我也在本地创建文件夹Picture3,并txt记录获取的URL,如下图所示:
(By:Eastmount 2015-3-20 下午5点 http://blog.csdn.net/eastmount/)
[python学习] 简单爬取图片网站图库中图片相关推荐
- python第一天----爬取优美图库的图片
python第一天----爬取优美图库的图片 首先我们需要爬取的步骤: 1.选择爬取的网页,这里我选取的是https://www.umei.net/bizhitupian/,直接爬取的首页第一页的图片 ...
- Pycharm + python 爬虫简单爬取网站数据
本文主要介绍简单的写一个爬取网站图片并将图片下载的python爬虫示例. 首先,python爬虫爬取数据,需要先了解工具包requests以及BeautifulSoup requests中文文档:ht ...
- [python学习] 简单爬取维基百科程序语言消息盒
文章主要讲述如何通过Python爬取维基百科的消息盒(Infobox),主要是通过正则表达式和urllib实现:后面的文章可能会讲述通过BeautifulSoup实现爬取网页知识.由于这方面的文章还是 ...
- [Python学习] 简单爬取CSDN下载资源信息
这是一篇Python爬取CSDN下载资源信息的例子,主要是通过urllib2获取CSDN某个人所有资源的资源URL.资源名称.下载次数.分数等信息:写这篇文章的原因是我想获取自己的资源 ...
- python实战:爬取优美图库,将图片格式的本地存储
import requests from bs4 import BeautifulSoup import time 解析主页面原代码,提取子页面url 通过子页面拿取内容,找到图片的下载地址 下载图片 ...
- python爬虫实践(1)爬取图片网站的高清壁纸
python爬虫实践(1)爬取图片网站的高清壁纸 robots.txt协议: 爬取网站之前首先检查该站点根目录下是否存在robots.txt,如果存在,就会按照该文件中的内容来确定访问的范围:如果该文 ...
- python爬虫下载小说_用PYTHON爬虫简单爬取网络小说
用PYTHON爬虫简单爬取网络小说. 这里是17K小说网上,随便找了一本小说,名字是<千万大奖>. 里面主要是三个函数: 1.get_download_url() 用于获取该小说的所有章节 ...
- 用PYTHON爬虫简单爬取网络小说
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- 使用Scrapy爬虫框架简单爬取图片并保存本地(妹子图)
使用Scrapy爬虫框架简单爬取图片并保存本地(妹子图) 初学Scrapy,实现爬取网络图片并保存本地功能 一.先看最终效果 保存在F:\pics文件夹下 二.安装scrapy 1.python的安装 ...
最新文章
- access字段属性设置下拉列表_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
- Spring-AOP 引介切面
- html3d样式,CSS+HTML3D文字效果
- number of databases available at XJTLU
- 进程通信方法的特点以及使用场景
- 七、gradle依赖管理
- 机器学习总结之第一章绪论
- Java教程:Java字符串替换实例
- Android学习--写一个发送短信的apk,注意布局文件的处理过程!!!
- VSA Cluster中小企业无SAN环境解决方案
- #python 颜色聚类处理
- php蓝牙连接不上,蓝牙音响连接不上手机怎么办 两种方法轻松解决连接问题
- 第11章 Java枚举与泛型总结
- 围棋规则 斜着连成一条线_进入围棋世界的第一步
- 在WordPress网站上添加鼠标点击特效和网页背景特效
- 报错:Exception opening socket
- 全新升级达内java高级互联网架构课|课件齐全
- MCE| 熬夜导致DNA损伤、致癌
- windows上安装python-ldap
- 把妹导论第二版(Hunting-Girls Introduction II)
热门文章
- MongoDB 语法和mysql语法对比学习
- Oracle数据库索引失效,引起GoldenGate异常
- Eclipse + Apache Axis2 发布RESTful WebService(一)基础知识
- (转)Maven学习总结(七)——eclipse中使用Maven创建Web项目
- 如何 打包整合linux系统文件夹 用于刷机包等等, 其中包括打包 句号开头 . 开头的文件, 排除系统文件 等...
- MVC POST请求后执行javascript代码
- 【Alpha】第二次Scrum meeting
- WP8.1学习系列(第八章)——透视Pivot设计指南
- 【转载】关于错误:ASP.NET The URL-encoded form data is not valid. .
- SharePoint Hello World Web Part