最近简单地看了下python爬虫的视频。便自己尝试写了下爬虫操作,计划的是把某一个网站上的美女图全给爬下来,不过经过计算,查不多有好几百G的样子,还是算了。就首先下载一点点先看看。

本次爬虫使用的是python2.7的版本,并且本次的目标网站并没有采用js来加载图片,所以没有涉及对js脚本的解析,都是通过来分析html文件通过正则来一步步提取图片网址,然后存起来。

首先这个网站有很多分类,到美女图这个子网页,可以发现有很多页,同时每页有多个相册,每个相册点进去就会有多个页,每页有多张照片

流程大概是这样

找到所有页数

----遍历所有的页数

----遍历当前页的所有相册(给每个相册建立一个目录)

----遍历当前相册的所有图片(遍历此相册的所有页(遍历当前页的所有照片并找到图片的url))

----获得图片url就存起来

不说了,直接上代码

这个版本是windows上的运行版本

import urllib
import re
import os
import time
import socket
def get_html(url):
socket.setdefaulttimeout(10)
papg = urllib.urlopen(url)
html = papg.read()
html = unicode(html, "gbk").encode("utf8")
return html def get_img(html):
imgre = re.compile(r'<img src="(.*?)"')
imglist = re.findall(imgre, html)
for imgurl in imglist:
print imgurl
global x
urllib.urlretrieve(imgurl, '.\\photo\%05d.jpg'%x)
x += 1
print("正在下载第%s张图片"%x) def get_tag_list(html):
szurlre = re.compile(r'<a href="(http://www.5442.com/tag/.*?.html)" class')
tag_list = re.findall(szurlre, html)
return tag_list def get_page_num(html):
szurlre = re.compile(r'(\d+).html\'>末页')
szresult = re.findall(szurlre, html)
if len(szresult) == 0:
page_num = 0
else:
page_num = int(szresult[0])
print page_num
return page_num def get_page_num2(html):
szurlre = re.compile(r'共(\d+)页')
szresult = re.findall(szurlre, html)
if len(szresult) == 0:
page_num = 0
else:
page_num = int(szresult[0])
print page_num
return page_num #获得单页的相册
def get_ablum_list(html):
szurlre = re.compile(r'(http://www.5442.com/meinv/2\d+/\d+.html)" target=')
ablum_list = re.findall(szurlre, html);
return ablum_list
#获得相册的名称
def get_ablum_name(html):
szurlre = re.compile(r'<title>(\S+)</title>')
ablum_name = re.findall(szurlre, html)
return ablum_name[0]
#获得单页的图片
def get_photo(html, dir, photo_num):
imgre = re.compile(r'点击图片进入下一页\' ><img src=\'(http://\S+.jpg)\' alt=')
imglist = re.findall(imgre, html)
for imgurl in imglist:
try:
socket.setdefaulttimeout(2)
urllib.urlretrieve(imgurl, unicode('.\\photo\\%s\%05d.jpg'%(dir, photo_num), "utf8"))
print("正在下载第%s张图片"%photo_num)
photo_num = photo_num + 1
except:
continue
return photo_num url = "http://www.5442.com/meinv/"
baseurl = "http://www.5442.com"
html = get_html(url)
page_num = get_page_num(html)
print ("一共有%s页"%page_num)
ablum_num = 0
try:
os.mkdir("photo")
except:
print "目录已经存在,继续下载"
#遍历所有的页
for i in range(1, page_num):
if i != 1:
url = "http://www.5442.com/meinv/list_1_%s.html"%i
try:
html = get_html(url)
except:
continue
ablum_list = get_ablum_list(html)
#遍历当前页的所有相册
for ablum_url in ablum_list:
ablum_num = ablum_num + 1
try:
photo_html = get_html(ablum_url)
except:
continue
url_part = ablum_url[0:-5]
photo_page_num = get_page_num2(photo_html)
#获取相册名有点问题,直接以数字来创建更加方便,便于分
#ablum_name = get_ablum_name(photo_html)
ablum_name = "编程资料" + "%05d" % ablum_num
print ablum_name
photo_num = 0
#创建相册对应的目录
ui_ablum_name = unicode(ablum_name, "utf8")
try:
os.mkdir(".\\photo\\"+ui_ablum_name)
except:
continue
for i in range(1, photo_page_num):
if i != 1:
ablum_url = url_part + "_%d"%i + ".html"
try:
photo_html = get_html(ablum_url)
except:
continue
#进行存储操作
photo_num = get_photo(photo_html, ablum_name, photo_num)

运行效果截图:



这样就运行成功了。

以下是linux下的运行代码,主要是编码和存储的路径格式不一样

#!/usr/bin/python
# -*- coding:utf8 -*- import urllib
import re
import os
import time
import socket
def get_html(url):
socket.setdefaulttimeout(2)
papg = urllib.urlopen(url)
html = papg.read()
html = unicode(html, "gbk").encode("utf8")
return html def get_img(html):
imgre = re.compile(r'<img src="(.*?)"')
imglist = re.findall(imgre, html)
for imgurl in imglist:
print imgurl
global x
urllib.urlretrieve(imgurl, '.\\photo\%05d.jpg'%x)
x += 1
print("正在下载第%s张图片"%x) def get_tag_list(html):
szurlre = re.compile(r'<a href="(http://www.5442.com/tag/.*?.html)" class')
tag_list = re.findall(szurlre, html)
return tag_list def get_page_num(html):
szurlre = re.compile(r'(\d+).html\'>末页')
szresult = re.findall(szurlre, html)
if len(szresult) == 0:
page_num = 0
else:
page_num = int(szresult[0])
print page_num
return page_num def get_page_num2(html):
szurlre = re.compile(r'共(\d+)页')
szresult = re.findall(szurlre, html)
if len(szresult) == 0:
page_num = 0
else:
page_num = int(szresult[0])
print page_num
return page_num #获得单页的相册
def get_ablum_list(html):
szurlre = re.compile(r'(http://www.5442.com/meinv/2\d+/\d+.html)" target=')
ablum_list = re.findall(szurlre, html);
return ablum_list
#获得相册的名称
def get_ablum_name(html):
szurlre = re.compile(r'<title>(\S+)</title>')
ablum_name = re.findall(szurlre, html)
return ablum_name[0]
#获得单页的图片
def get_photo(html, dir, photo_num):
imgre = re.compile(r'点击图片进入下一页\' ><img src=\'(http://\S+.jpg)\' alt=')
imglist = re.findall(imgre, html)
for imgurl in imglist:
try:
socket.setdefaulttimeout(2)
urllib.urlretrieve(imgurl, './photo//%s//%05d.jpg'%(dir, photo_num))
print("正在下载第%s张图片"%photo_num)
photo_num = photo_num + 1
except:
continue
return photo_num url = "http://www.5442.com/meinv/"
baseurl = "http://www.5442.com"
html = get_html(url)
page_num = get_page_num(html)
print ("一共有%s页"%page_num)
ablum_num = 0
try:
os.mkdir("./photo")
except:
print "目录已经存在"
for i in range(1, page_num):
if i != 1:
url = "http://www.5442.com/meinv/list_1_%s.html"%i
try:
html = get_html(url)
except:
continue
ablum_list = get_ablum_list(html)
for ablum_url in ablum_list:
ablum_num = ablum_num + 1
try:
photo_html = get_html(ablum_url)
except:
continue
url_part = ablum_url[0:-5]
photo_page_num = get_page_num2(photo_html)
ablum_name = "编程资料" + "%05d" % ablum_num
print ablum_name
photo_num = 0
#创建相册对应的目录
ui_ablum_name = ablum_name
try:
os.mkdir("./photo/"+ui_ablum_name)
except:
continue
for i in range(1, photo_page_num):
if i != 1:
ablum_url = url_part + "_%d"%i + ".html"
try:
photo_html = get_html(ablum_url)
except:
continue
photo_num = get_photo(photo_html, ablum_name, photo_num)

运行效果:



保存目录

python爬虫学习-爬取某个网站上的所有图片的更多相关文章

  1. 初次尝试python爬虫,爬取小说网站的小说。

    本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说. 下面直接上菜. 1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requests.requests是python实现的简单易 ...

  2. python爬虫学习---爬取微软必应翻译(中英互译)

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:OSinooO 本人属于python新手,刚学习的 python爬虫基础 ...

  3. Python爬虫:爬取某网站关键词对应商品ID,且存入DB2数据库

    公司研发不给力,我就自己写了一个,专门爬关键词对应的商品ID. 其中还学会了用Python操作DB2数据库.Python发送邮件.写日志文件.处理浏览器访问限制. #!/usr/bin/python# ...

  4. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  5. python爬虫实战---爬取大众点评评论

    python爬虫实战—爬取大众点评评论(加密字体) 1.首先打开一个店铺找到评论 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经 ...

  6. Python爬虫之爬取慕课网课程评分

    BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...

  7. Python爬虫之爬取站内所有图片

    title date tags layut Python爬虫之爬取站内所有图片 2018-10-07 Python post 目标是 http://www.5442.com/meinv/ 如需在非li ...

  8. Python爬虫之爬取淘女郎照片示例详解

    这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...

  9. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

随机推荐

  1. C++虚函数浅探

    C++中和虚函数(Virtual Function)密切相关的概念是"动态绑定"(Dynamic Binding),与之相对的概念是"静态绑定"(Static ...

  2. Rest(表述性状态转移)

    本文的主要内容有: 1.了解Rest 2.了解RESTful WebService 3.使用SpringMvc实现RESTful ------------------------------我是华丽的 ...

  3. 51nod1130(斯特林近似)

    题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1130 题意: 中文题诶~ 思路: 直接斯特林公式就好了~ ...

  4. [Android]Android开发入门之HelloWorld

    引言:在做Unity开发的时候,发现这么个问题,虽然Unity是跨平台的,能够进行Android,IOS,Web,PC等开发,但如果要实现一些稍微系统层的东西,还是需要通过通信,调用原系统的接口(自定 ...

  5. include、merge 、ViewStub

    在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...

  6. Daily Scrum Meeting ——SeventhDay

    一.Daily Scrum Meeting照片 二.Burndown Chart 三.项目进展 1.发布者各界面的制作 2.报名表.通知表的制作 3.基本完成登陆.注册.忘记密码.联系管理员界面 四. ...

  7. 数学 SRM 690 Div1 WolfCardGame 300

    Problem Statement      Wolf Sothe and Cat Snuke are playing a card game. The game is played with exa ...

  8. Mysql与PostgreSql数据库学习笔记---打酱油的日子

    mysql 从最基础的数据引擎,到进程结构,都不能支持数据版本.导致其职能阻塞“并发”,不支持最基本的事务,innodb达不到基本事务要求,任何写数据,都导致整个表锁住.充其量只能算是一个玩具,或者说 ...

  9. Ubuntu彻底删除MySQL然后重装MySQL

    删除 mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt- ...

  10. 全新的博客之旅&大学生活

    博客之旅: 刚刚申请了博客,感觉非常兴奋,整个人都变得有精神了. 想来几个月之前看到奇奇申了博客,在上面写文章,写各种解题报告,心里就好羡慕,好希望将来有一天,也能有一个属于自己的博客.由于之前课业压 ...