使用python编写一个壁纸网站的简单爬虫
目标网站: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编写一个壁纸网站的简单爬虫的更多相关文章
- 用Python编写一个简单的Http Server
用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...
- 使用 python 编写一个授权登录验证的模块
使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...
- 为Python编写一个简单的C语言扩展模块
最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...
- [初学Python]编写一个最简单判断SQL注入的检测工具
0x01 背景 15年那会,几乎可以说是渗透最火的一年,各种教程各种文章,本人也是有幸在那几年学到了一些皮毛,中间因学业问题将其荒废至今.当初最早学的便是,and 1=1 和 and 1=2 这最简单 ...
- 如何用Python编写一个聊天室
一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...
- 使用python编写量子线路打印的简单项目,并使用Sphinx自动化生成API文档
技术背景 该文章一方面从量子线路的打印着手,介绍了一个简单的python量子线路工程.同时基于这个简单的小工程,我们顺带的介绍了python的API文档自动化生成工具Sphinx的基本使用方法. 量子 ...
- day-1 用python编写一个简易的FTP服务器
从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...
- Python 编写一个有道翻译的 workflow 教程
最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...
- Python入门-编写抓取网站图片的爬虫-正则表达式
//生命太短 我用Python! //Python真是让一直用c++的村里孩子长知识了! 这个仅仅是一个测试,成功抓取了某网站1000多张图片. 下一步要做一个大新闻 大工程 #config = ut ...
随机推荐
- 修改XML指定标签的内容
修改Xml指定标签内容(我这是去掉指定标签内容的空格) 其实就是个很简单的方法,需要的盆友直接拿走. test.xml <?xml version="1.0" encodin ...
- WinDbg 蓝屏dump分析教程
一.WinDbg是什么?它能做什么? WinDbg是在windows平台下,强大的用户态和内核态调试工具.它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏.程序崩溃(IE崩溃)原因,是我们日常 ...
- HTML <div> 标签
定义和用法: <div> 可定义文档中的分区或节(division/section). <div> 标签可以把文档分割为独立的.不同的部分.它可以用作严格的组织工具,并且不使用 ...
- Redis常用命令入门2:散列类型
散列命令 散列类型的键值其实也是一种字典解耦,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,所以说散列类型不能嵌套其他的数据类型.一个散列类型的键可以包含最多2的32次方-1个 ...
- enable feature AJAX of MOSS2007
As default, the feature AJAX of MOSS2007 is disabled, so the site web configuration file should be m ...
- ios基础篇(二十四)—— 文字、图片的绘制及其自定义Button
这篇文章我们主要来拿官方的控件来研究一下,我们来仿照官方的控件,自己来实现它提供的控件: 首先来看看基本的图片与文字的绘制,很简单. 一.imageView 所有的视图都是继承自UIView,所以我们 ...
- Swiper说明&&API手册 【中文手册Swiper】
原文地址:http://www.cnblogs.com/scavengers/p/3760449.html 示例: <link rel="stylesheet" href= ...
- nginx、Apache、IIS服务器解决 413 Request Entity Too Large问题方法汇总
一.nginx服务器 nginx出现这个问题的原因是请求实体太长了.一般出现种情况是Post请求时Body内容Post的数据太大了,如上传大文件过大.POST数据比较多. 处理方法 在nginx.co ...
- 第二讲(核心c#)
一.C#类型 .字段和局部变量的作用域冲突 using System; namespace Wrox { public class ScopeTest2 { ; public static void ...
- 用JS修改checkbox的选中状态
代码如下: <SCRIPT LANGUAGE="JavaScript"> <!-- function change() { var c=document.myfo ...