最近开始学习爬虫,一开始看的是静觅的爬虫系列文章,今天看到糗事百科成人版,心里就邪恶了一下,把图片都爬下来吧,哈哈~

虽然后来实现了,但还是存在一些问题,暂且不提,先切入正题吧,没什么好说的,直接上代码如下:

环境:Python2.79

 #coding: utf-8
import urllib2
import urllib
import re
import os #糗百成人版抓取图片
class QBAdult: #类初始化
def __init__(self):
self.baseURL = "http://www.qiubaichengnian.com/"
#获取索引页面内容
def getPage(self, pageIndex):
url = self.baseURL + "index_" + str(pageIndex) + ".html"
req_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept':'text/html;q=0.9,*/*;q=0.8',
'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding':'gzip',
'Connection':'close',
'Referer':None #注意如果依然不能抓取的话,这里可以设置抓取网站的host
}
req_timeout = 5
request = urllib2.Request(url, None, req_header)
reponse = urllib2.urlopen(request, None, req_timeout)
#print reponse.read().decode('gbk')
return reponse.read().decode('gbk') #获取页面所有条目信息,list格式
def getContents(self, pageIndex):
page = self.getPage(pageIndex)
pattern = re.compile('div class="ui-module".*?<a href=.*?>(.*?)</a>.*?<img.*?src="(.*?)"', re.S)
items = re.findall(pattern, page)
#for item in items:
#print item[0], item[1]
return items #获取页面所有图片
def getAllImgs(self, items): images = []
for item in items:
images.append(item[1])
return images #保存多张图片
def saveAllImg(self, images, n, name):
number = 1
print u"--------------正在保存第", n , u"页美女图片-------------"
for imageURL in images:
splitPath = imageURL.split('.')
fTail = splitPath.pop()
fileName = name + "/" + str(n) + "-" + str(number) + "." + fTail
self.saveImg(imageURL, fileName)
number += 1 #传入图片地址,文件名,保存单张图片
def saveImg(self, imageURL, fileName):
u = urllib.urlopen(imageURL)
data = u.read()
f = open(fileName, 'wb')
f.write(data)
print u"正在保存美女图片", fileName
f.close() #创建新目录
def mkdir(self, path):
path = path.strip()
#判断是否存在
isExists = os.path.exists(path)
if not isExists:
print u"新建名字为", path, u"的文件夹"
os.makedirs(path)
return True
else:
#如果目录存在则不创建,并提示目录已存在
print u"名为", path, u"的文件夹已经创建成功"
return False def savePageInfos(self, start, end):
fileName = "beautifull"
#获取一页内容,存入beautifull文件夹
self.mkdir(fileName)
for i in range(start, end+1):
print u"正在保存第", i, "页的美女图片"
contents = self.getContents(i)
images = self.getAllImgs(contents)
self.saveAllImg(images, i, fileName) qAdult = QBAdult()
qAdult.savePageInfos(1, 301)

其中16-23行的代码是后来出现IOERROR以及超时等错误后加上的,但是这种方法只是治标不治本,时不时程序还会停止,错误如下:

小规模抓取图片,几百页抓取会出现如上问题,我还没有找到什么原因。。。。

Python抓取糗事百科成人版图片的更多相关文章

  1. Xpath--使用Xpath爬取糗事百科成人版图片

    #!usr/bin/env python#-*- coding:utf-8 _*-"""@author:Hurrican@file: 爬取糗事百科.py@time: 20 ...

  2. python 抓取糗事百科糗图

    1 首先看下要抓取的页面 这是糗事百科里面的糗图页面,每一页里面有很多的图片,我们要做的就是把这些图片抓取下来. 2 分析网页源代码 发现源代码里面的每张图是这样储存的,所以决定使用正则匹配出图片的u ...

  3. Python爬虫--抓取糗事百科段子

    今天使用python爬虫实现了自动抓取糗事百科的段子,因为糗事百科不需要登录,抓取比较简单.程序每按一次回车输出一条段子,代码参考了 http://cuiqingcai.com/990.html 但该 ...

  4. Python爬取糗事百科

    import urllib import urllib.request from bs4 import BeautifulSoup """     1.抓取糗事百科所有纯 ...

  5. bs4抓取糗事百科

    抓取糗事百科内容及评论,不包含图片信息.user-agent填入浏览器的即可.user-agent对应的value,360极速浏览器的话,可以在地址栏输入about:version,回车,用户代理后面 ...

  6. python爬取糗事百科段子

    初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) #-*-coding:utf--*- import urllib import urllib2 import re page = url ...

  7. python 爬取糗事百科 gui小程序

    前言:有时候无聊看一些搞笑的段子,糗事百科还是个不错的网站,所以就想用Python来玩一下.也比较简单,就写出来分享一下.嘿嘿 环境:Python 2.7 + win7 现在开始,打开糗事百科网站,先 ...

  8. Python爬取糗事百科示例代码

    参考链接:http://python.jobbole.com/81351/#comment-93968 主要参考自伯乐在线的内容,但是该链接博客下的源码部分的正则表达式部分应该是有问题,试了好几次,没 ...

  9. Python爬虫爬取糗事百科段子内容

    参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import ...

随机推荐

  1. org.apache.ibatis.binding.BindingException: Mapper method 'attempted to return null from a method with a primitive return type (long).

    一.问题描述 今天发现测试环境报出来一个数据库相关的错误 org.apache.ibatis.binding.BindingException: Mapper method 'attempted to ...

  2. XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem D. Clones and Treasures

    题目:Problem D. Clones and TreasuresInput file: standard inputOutput file: standard outputTime limit: ...

  3. JVM年轻代(转)

    本文转自:http://my.oschina.net/xishuixixia/blog/133850 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完 ...

  4. JavaWeb项目中各种路径的获取

    以工程名为/DemoWeb为例: 访问的jsp为: http://localhost:8080/DemoWeb/test/index.jsp 1 JSP中获得当前应用的相对路径和绝对路径 (1)得到工 ...

  5. LNMP环境简单教程

    一:LNMP可以进行简单优化,主要2方面.NGINX和PHP进程数,分别是以下2个文件: 1. /usr/local/nginx/conf/nginx.conf2. /usr/local/php/et ...

  6. C++之MFC基本设置

    1 设置单元格的值 1) 选中指定单元格,使用SetValue设置值 CellName.Format(_T("A%d"),i);//单元格的名称 range.AttachDispa ...

  7. spring-boot单元测试

    一.为什么要写单元测试 很多程序员有两件事情不愿意做: 写注释. 写单元测试. 但是在看代码时又会希望有清晰明了的注释,重构代码时能有一套随时可以跑起来的单元测试. 最近在迁移一个项目,从sqlser ...

  8. Python面试题之Python生成器

    首先说明一下生成器也是迭代器,也有迭代器的那些优点. 那为什么要生成器呢?因为到目前为止都 不是你写的迭代器,都是别人定义好的.那如何自己去造一个迭代器呢?下面的内容就会给你答案. 想要自己造一个迭代 ...

  9. 20145313张雪纯 《Java程序设计》8周学习总结

    20145313张雪纯 <Java程序设计>8周学习总结 教材学习内容总结 java.util.logging包的优点在于提供了日志功能相关类与接口,不必额外配置日志组件就可以在标准jav ...

  10. 20145331 《Java程序设计》第3周学习总结

    20145331 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 •对象(Object):存在的具体实体,具有明确的状态和行为 •类(Class):具有相同属性和行 ...