目标网站:http://www.netbian.com/

目的:实现对壁纸各分类的第一页壁纸的获取

一:分析网站,编写代码:

(ps:源代码在文章的最后)

1.获取网站目录部分的一大段代码,下一步再进行仔细匹配网址与标题.

 #coding=gbk
#目标:下载各目录的壁纸(大图)
__author__ = 'CQC'
import urllib2
import urllib
import re
import os #创建壁纸下载文件夹
path = 'd:\\彼岸壁纸'
if not os.path.isdir(path):
os.makedirs(path)
#目录
big_title = [] #首页打开
url = 'http://www.netbian.com/'
headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'}
request = urllib2.Request(url,headers = headers)
response = urllib2.urlopen(request) #首页目录源代码获取
pat_menu = re.compile('<ul class="menu">(.*?)</a></div>',re.S)
code_menu = re.search(pat_menu,response.read())

如图:

2.进行分类的标题与链接的匹配。

 #目录标题
pat_menu_title = re.compile('<a href=".*?" title="(.*?)">',re.S)
menu_title = re.findall(pat_menu_title,code_menu.group(1))
for a_item in menu_title:
big_title.append(a_item)
print a_item #目录链接
pat_menu_link = re.compile('<a href="(.*?)" title=".*?">',re.S)
menu_link = re.findall(pat_menu_link,code_menu.group(1))

如下图所示:

3.从爬取到的目录进入,获得该目录下所有壁纸的标题与链接.

 #进入目录
j = 0
for b_item in menu_link:
url_menu = 'http://www.netbian.com/' + b_item
request_son = urllib2.Request(url_menu,headers = headers)
response_son = urllib2.urlopen(request_son)
#获得每个目录的图片标题,链接 #获得子目录标题
title_son = []
pat_title_son = re.compile('<img src=".*?" data-src=".*?" alt="(.*?)"/>',re.S)
res_title = re.findall(pat_title_son,response_son.read())
for c_item in res_title:
title_son.append(c_item) #筛选出子目录代码
pat_code_son = re.compile('<ul>(.*?)</ul>',re.S)
middle_pattern = urllib2.Request(url_menu,headers = headers)
middle_response = urllib2.urlopen(middle_pattern)
res_code_son = re.search(pat_code_son,middle_response.read()) #获得子目录链接,合成大图网页链接
pat_link_son = re.compile('<li><a href="(.*?)" target="_blank"><img',re.S)
res_link = re.findall(pat_link_son,res_code_son.group(1))

如下图所示:

4.根据上一步爬取到的链接,合成真正的1080p壁纸链接.

因为我们从上图标题点进去后是这样:

还需要点击下载按钮才能打开1080p壁纸的链接。为了方便,我们直接合成1080p壁纸的链接.

例如: http://www.netbian.com/desk/9805.htm

对应的1080p网址:http://www.netbian.com/desk/9805-1920x1080.htm

代码:

     i = 0
#显示进度
print big_title[j]
for d_item in res_link:
#获得大图下载链接
if d_item == 'http://www.mmmwu.com/':
pass
else:
new_link = 'http://www.netbian.com/' + d_item[:-4] + '-1920x1080.htm'
print new_link

(ps:由于‘美女’分类中的第一个标题链接到了其他网站,为了简单一点,所以我直接跳过了)

5.进入1080p壁纸链接,下载壁纸.

 request_real = urllib2.Request(new_link,headers = headers)
response_real = urllib2.urlopen(request_real)
pat_real = re.compile('<img src="(.*?)" alt=".*?"/></td></tr>') link_real = re.search(pat_real,response_real.read())
#跳过vip壁纸
if link_real:
fina_link = link_real.group(1)
#创建下载目录
path_final = 'd:\\彼岸壁纸\\' + big_title[j] + '\\'
if not os.path.isdir(path_final):
os.makedirs(path_final)
path_pic = path_final + title_son[i] + '.jpg'
f = open(path_pic,'wb')
data = urllib.urlopen(fina_link)
f.write(data.read())
f.close()
if not data:
print "Download Failed."
i += 1
print 'One menu download OK.'
j += 1

6.下载完成.

二、所有的源代码。

 #coding=gbk
#目标:下载各目录的壁纸(大图)
__author__ = 'CQC'
import urllib2
import urllib
import re
import os #创建壁纸下载文件夹
path = 'd:\\彼岸壁纸'
if not os.path.isdir(path):
os.makedirs(path)
#目录
big_title = [] #首页打开
url = 'http://www.netbian.com/'
headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'}
request = urllib2.Request(url,headers = headers)
response = urllib2.urlopen(request) #首页目录源代码获取
pat_menu = re.compile('<ul class="menu">(.*?)</a></div>',re.S)
code_menu = re.search(pat_menu,response.read()) #目录标题
pat_menu_title = re.compile('<a href=".*?" title="(.*?)">',re.S)
menu_title = re.findall(pat_menu_title,code_menu.group(1))
for a_item in menu_title:
big_title.append(a_item)
print a_item #目录链接
pat_menu_link = re.compile('<a href="(.*?)" title=".*?">',re.S)
menu_link = re.findall(pat_menu_link,code_menu.group(1)) #进入目录
j = 0
for b_item in menu_link:
url_menu = 'http://www.netbian.com/' + b_item
request_son = urllib2.Request(url_menu,headers = headers)
response_son = urllib2.urlopen(request_son)
#获得每个目录的图片标题,链接 #获得子目录标题
title_son = []
pat_title_son = re.compile('<img src=".*?" data-src=".*?" alt="(.*?)"/>',re.S)
res_title = re.findall(pat_title_son,response_son.read())
for c_item in res_title:
title_son.append(c_item) #筛选出子目录代码
pat_code_son = re.compile('<ul>(.*?)</ul>',re.S)
middle_pattern = urllib2.Request(url_menu,headers = headers)
middle_response = urllib2.urlopen(middle_pattern)
res_code_son = re.search(pat_code_son,middle_response.read()) #获得子目录链接,合成大图网页链接
pat_link_son = re.compile('<li><a href="(.*?)" target="_blank"><img',re.S)
res_link = re.findall(pat_link_son,res_code_son.group(1))
i = 0
#显示进度
print big_title[j]
for d_item in res_link:
#获得大图下载链接
if d_item == 'http://www.mmmwu.com/':
pass
else:
new_link = 'http://www.netbian.com/' + d_item[:-4] + '-1920x1080.htm'
print new_link
request_real = urllib2.Request(new_link,headers = headers)
response_real = urllib2.urlopen(request_real)
pat_real = re.compile('<img src="(.*?)" alt=".*?"/></td></tr>') link_real = re.search(pat_real,response_real.read())
#跳过vip壁纸
if link_real:
fina_link = link_real.group(1)
#创建下载目录
path_final = 'd:\\彼岸壁纸\\' + big_title[j] + '\\'
if not os.path.isdir(path_final):
os.makedirs(path_final)
path_pic = path_final + title_son[i] + '.jpg'
f = open(path_pic,'wb')
data = urllib.urlopen(fina_link)
f.write(data.read())
f.close()
if not data:
print "Download Failed."
i += 1
print 'One menu download OK.'
j += 1

使用python编写一个壁纸网站的简单爬虫的更多相关文章

  1. 用Python编写一个简单的Http Server

    用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...

  2. 使用 python 编写一个授权登录验证的模块

    使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...

  3. 为Python编写一个简单的C语言扩展模块

    最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...

  4. [初学Python]编写一个最简单判断SQL注入的检测工具

    0x01 背景 15年那会,几乎可以说是渗透最火的一年,各种教程各种文章,本人也是有幸在那几年学到了一些皮毛,中间因学业问题将其荒废至今.当初最早学的便是,and 1=1 和 and 1=2 这最简单 ...

  5. 如何用Python编写一个聊天室

    一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...

  6. 使用python编写量子线路打印的简单项目,并使用Sphinx自动化生成API文档

    技术背景 该文章一方面从量子线路的打印着手,介绍了一个简单的python量子线路工程.同时基于这个简单的小工程,我们顺带的介绍了python的API文档自动化生成工具Sphinx的基本使用方法. 量子 ...

  7. day-1 用python编写一个简易的FTP服务器

    从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...

  8. Python 编写一个有道翻译的 workflow 教程

    最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...

  9. Python入门-编写抓取网站图片的爬虫-正则表达式

    //生命太短 我用Python! //Python真是让一直用c++的村里孩子长知识了! 这个仅仅是一个测试,成功抓取了某网站1000多张图片. 下一步要做一个大新闻 大工程 #config = ut ...

随机推荐

  1. 苹果MacBook Air安装win7

    同事的一台mba,说iOS不习惯,希望装一个win7系统.机器看上去很小巧精致,运行iOS速度飞快.试着点了下鼠标,没反应,翻过来看了下,有个电源开关.拨了一下,细小的指示灯闪了闪,应该加上电了.唉, ...

  2. 仿W8屏保

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Selenium VS QTP

      Selenium系列 QTP 适用结构  B/S结构  C/S.B/S结构 适用人员 有一定代码基础(Java.C#.Python.Ruby) 对编程不是很熟悉的.厌烦了做手工功能测试的.想快速进 ...

  4. 基于C#在WPF中使用斑马打印机进行打印【转】

    原文链接:http://ju.outofmemory.cn/entry/132476 最近在项目中接手了一个比较有挑战性的模块——用斑马打印机将需要打印的内容打印出来.苦苦折腾了两天,总算有所收获,就 ...

  5. asp.netajax开发应用心得-accordation控件的事件处理

    今天,再次运行以前的项目时,发现按钮的单击事件不起作用了,加了断点之后发现根本没有触发该事件.... 按照网上找到的答案,有的说把控件删掉重新拖拽一个进去,虽然以前也遇到过控件失效,重新拖拽有效的时候 ...

  6. CSS网页布局全精通

    在本文中将使用四种常见的做法,结合CSS于结构化标记语法制作两栏布局.很快地就会发现,不用嵌套表格,间隔用的GIF也能做出分栏版面布局. 相关文章:CSS网页布局开发小技巧24则 稍后在"技 ...

  7. Eclipse JUnit 生成报告

    http://blog.sina.com.cn/s/blog_8af106960102v6qh.html 对Eclipse的工程写单元测试: 第一步: 1. 一个工程有多个测试类,将测试类放到一个测试 ...

  8. js写的闹钟,支持多个闹钟

    因为玩一个游戏,该游戏可以支持多个号,每个号有好多等时间的任务. 来回切换看,太耽误时间.手机的闹钟操作太麻烦. 所以写了一个使用配置文件的闹钟,简单方便. var ForReading = 1, F ...

  9. Primitive JS completion of AJAX

    Firstly , let us explain XMLHttpRequest open(), send(), readyState 1. open(method, url, async, user, ...

  10. Nginx的静态资源缓存以及压缩

    Nginx是一款轻量级的网页服务器.反向代理器以及电子邮件代理服务器.Nginx采用的是异步非阻塞的通信机制(epoll模型),支持更大的并发连接.所谓的epoll模型:当事件没有准备好时,就放入ep ...