专栏首页蛮三刀的后端开发专栏【python爬虫】百度贴吧帖子图片批量保存爬虫

【python爬虫】百度贴吧帖子图片批量保存爬虫

继续练手,做了个帖子爬虫,我默认设置为只保存楼主的图片。这样有很多好的图片或者漫画中间就不会被插楼的图片干扰了。

代码在:https://github.com/qqxx6661/python/blob/master/baiduPic1.0.py

下面贴代码,欢迎转载,请帖本页地址:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import urllib
import urllib2
import re
import sys
import socket
import os

class Tool:
    removeExtraTag = re.compile(r'_cke_saved_src="http.+?.jpg')
    def replace(self,x):
        x = re.sub(self.removeExtraTag,"",x)
        return x.strip()#strip()将前后多余内容删除

class Spider:
 
    def __init__(self,siteURL):
        self.siteURL = siteURL
        
    def getPage(self,pageIndex):
        if pageIndex == 1:
            url = self.siteURL + "?see_lz=1"
        else:
            url = self.siteURL + "?see_lz=1&pn=" + str(pageIndex)
        print '准备抓取:' + url
        request = urllib2.Request(url)
        response = urllib2.urlopen(request)
        return response.read()

    def getPic(self,pageIndex):
        page = self.getPage(pageIndex)
        imgre = re.compile(r'<img class="BDE_Image".*?height=".*?" src="(http://imgsrc.*?jpg)"')
        imglist = re.findall(imgre,page)
        print imglist
        imglist_clr = []
        for imgurl in imglist:
            imgurl_clr = tool.replace(imgurl)
            imglist_clr.append(imgurl_clr.encode('utf-8'))  #去除u'
        print '清洗多余字符完成'
        print imglist_clr
        x = 0
        for imgurl_clr in imglist_clr:
            print '正在保存第%s页的第%s张'%(pageIndex,x+1)
            try:
                urllib.urlretrieve(imgurl_clr,'%s/picture_%s_%s.jpg' % (name,pageIndex,x+1))
            except urllib2.URLError, e:  
                if isinstance(e.reason, socket.timeout):  
                    raise MyException("下载超时,跳过此图: %r" % e)
                    continue
                else:
                    continue
            x+=1


socket.setdefaulttimeout(5.0)   #设置全局超时5秒
tool=Tool()
print '请输入百度帖子网址:'
inURL = raw_input()

li = re.findall(r"\d+",inURL)
name = li[0]#li是一个list,取出其中唯一一个字符串
print '图片保存在当前目录的:%s下' % name
if not os.path.exists('%s' % name):
    os.makedirs('%s' % name)

spider = Spider(inURL)
for x in range(1,30):
    try:
        spider.getPic(x)
    except urllib2.URLError,e:
        print '服务器报出错误:%s' % e.code
        print '已经没有下一页了'
        break;
print '所有图片保存完毕'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【python爬虫】游民星空福利和壁纸帖图片爬虫

    代码源码贴在我的Github:https://github.com/qqxx6661/python/blob/master/gamerskyPic1.0.py

    后端技术漫谈
  • [Leetcode][python]Same Tree/相同的树

    简单题,一开始思考半天中序遍历的解法,发现太绕。 其实应该就是先根节点,再左右,也就是前序遍历。

    后端技术漫谈
  • [Leetcode][python]Symmetric Tree/对称二叉树

    其中左子树和右子树对称的条件: 两个节点值相等,或者都为空 左节点的左子树和右节点的右子树对称 左节点的右子树和右节点的左子树对称

    后端技术漫谈
  • 组合

    py3study
  • python paramiko 进行文件上传处理

    程序员同行者
  • Python写的Python解释器(七)--完结篇

    在程序运行时,只会创建一次VirtualMachine实例,这是因为只有一个Python解释器。 VirtualMachine存储着call stack,异常状...

    哒呵呵
  • python selenium2示例 - Page Object Model

    前言 python selenium2是当前主流的web自动化测试框架,提供了多浏览器的支持(chrome、ie、firefox、safari等等),同时支持...

    苦叶子
  • 使用Python编写iOS原生应用的框架设计思考(首篇) 原

    使用Python编写iOS原生应用,为何有这样的想法,其实本来是源于对JS类的跨平台框架的学习。熟悉原生开发的同学们都知道,对于可跨平台的原生框架,使用JS实现...

    珲少
  • Python基础练习100题 ( 41

    这十道题的代码在我的github上,如果大家想看一下每道题的输出结果,可以点击以下链接下载:

    py3study
  • 从 Zero 到 Hero ,一文掌握 Python

    数据科学社区

扫码关注云+社区

领取腾讯云代金券