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

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

环境: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. hust1010 The Minimum Length

    地址:http://acm.hust.edu.cn/problem/show/1010 题目: 1010 - The Minimum Length Time Limit: 1s Memory Limi ...

  2. Spring-1-F Dice(HDU 5012)解题报告及测试数据

    Dice Time Limit:1000MS     Memory Limit:65536KB Description There are 2 special dices on the table. ...

  3. 【转载】Android中attr自定义标签详解

    原文链接:http://blog.sina.com.cn/s/blog_62ef2f14010105vi.html:仅对排版进行优化,更方便阅读 <LinearLayout xmlns:andr ...

  4. 并发队列ConcurrentLinkedQueue与阻塞队列LinkedBlockingQueue的区别

    1.  介绍背景 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列. Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是Block ...

  5. git 提交和下载代码

    在github下需先 New repository 下载:进入程序工程目录下 如 cd f: cd ./Program\ Files/eclipse/workspace/IMoocMusic/ git ...

  6. Ubuntu16.04系统中Nmon的安装

    Nmon的安装,亲民的安装方法: apt install nmon 不再需要源码编译安装和下载文件到指定目录,解压再运行了.

  7. 企业和开发人员究竟该如何适应web标准?

    以下几点注意事项仅供参考:完善的前期策划和分析完善的前期逻辑模型以及项目规范性文档的制定尽可能将行政性干预移到策划阶段(按照国内的情况,做到这一点可能很困难)尽可能向后兼容,在项目规范性文档制定阶段对 ...

  8. [入坑系列] Mybatis 中$与#的区别

    1.理解 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 sel ...

  9. ashx 方法模板

    ; ); //查询字符串拼接 string searchparams = DTRequest.GetQueryString("jsonstring"); fooddetail mo ...

  10. GRUB2 分析 (二)

    接上一篇 实际上在512字节的MBR中,真正可用的空间并不多.除了一开始的跳转指令外,起始部分是一个被称为BPB的区域,即BIOS参数块(BISO Parameter Block).主要是FAT和NT ...