根据输入的贴吧地址,爬取想要该贴吧的图片,保存到本地文件夹,仅供参考:

#!/usr/bin/python
#_*_coding:utf-8_*_
import urllib
import urllib2
import re
import os
import sys

reload(sys)
sys.setdefaultencoding("utf-8")
#下载图片
class GetPic:
#页面初始化
def __init__(self,baseUrl,seelz):
#base链接地址
self.baseURL = baseUrl
#是否只看楼主
self.seeLZ = '?seelz=' + str(seelz)
#self.tool = tool.Tool()

#获取页面内容
def getPage(self,page):
try:
url = self.baseURL + self.seeLZ + '&pn=' + str(page)
request = urllib2.Request(url)
response = urllib2.urlopen(request)
html = response.read().decode('utf-8')
#print html
return html
#链接报错的原因
except urllib2.URLError, e:
if hasattr(e,"reason"):
print u'链接百度贴吧失败,错误原因:',e.reason
return None

#获取帖子一共有多少页
def getPageNum(self,page):
page = self.getPage(1)
pattern = re.compile('<li class="l_reply_num.*?</span>.*?<span.*?>(.*?)</span>',re.S)
result = re.search(pattern,page)
if result:
#输出页码数
#print result.group(1)
pagenum = result.group(1).strip()
#print result.group(1)
return pagenum
else:
print None

#获取页面的图片
def getPic(self,page):
html = self.getPage(page)
#正则匹配图片的地址
reg = r'<img class="BDE_Image".*?src="(.*?)".*?>'
pattern = re.compile(reg)
items = re.findall(pattern,html)
return items

def savePic(self,page):
#pageNum = self.getPageNum(1)
items = self.getPic(page)

x = 0
for item in items:
print item
#根据实际保存图片的地址进行修改
urllib.urlretrieve(item,'D:\learn\python-bqb\%s-%s.jpg' % (page,x))
x += 1

def Start(self):
#indexPage = self.getPage(1)
pageNum = self.getPageNum(1)
if pageNum == None:
print "URL已失效,请重试"
return
try:
print "该帖子共有" + str(pageNum) + "页"
for i in range(1,int(pageNum) + 1):
print "正在写入第" + str(i) + "页数据"
#self.getPage(i)
#self.getPic(i)
self.savePic(i)

except IOError,e:
print "写入异常,原因" + e.message
finally:
print "写入任务完成"

print u"请输入帖子的代号"

baseURL = 'http://tieba.baidu.com/p/' + str(raw_input(u'http://tieba.baidu.com/p/'))
seeLZ = raw_input("是否只获取楼主发表的图片,是输入1,否输入0\n")
bdtp = GetPic(baseURL,seeLZ)
bdtp.Start()

'''
#创建目录保存图片
def mkdir(self,path):
path = path.strip()
#判断路径是否存在
#存在 返回True
#不存在 返回False
isExists = os.path.exists(path)
#判断结果
if not isExists:
#如果不存在则创建目录
print u"新创建了目录名为:" + path
#创建目录操作函数
os.makedirs(path)
return True
else:
#如果目录已存在不创建,提示目录已存在
print u"目录" + path + "已存在"
return False

#保存图片
def savePic(html,items):
x = 0
for item in items:
filename = item + '.jpg'
while open(filename,'wb') as fp:
img = getPic(html)
fp.write(img)
'''

Python爬虫爬取百度贴吧的图片的更多相关文章

  1. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  2. python爬虫-爬取百度图片

    python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...

  3. python爬虫---爬取王者荣耀全部皮肤图片

    代码: import requests json_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win ...

  4. 写一个python 爬虫爬取百度电影并存入mysql中

    目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...

  5. python爬虫—爬取百度百科数据

    爬虫框架:开发平台 centos6.7 根据慕课网爬虫教程编写代码 片区百度百科url,标题,内容 分为4个模块:html_downloader.py 下载器 html_outputer.py 爬取数 ...

  6. Python爬虫爬取百度贴吧的帖子

    同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urlli ...

  7. Python爬虫爬取百度翻译之数据提取方法json

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统 说明:本例为实现输入中文翻译为英文的小程序,适合Python爬虫的初学者一起学习,感兴趣的可以做英文翻译为中文的 ...

  8. python爬虫–爬取煎蛋网妹子图片

    前几天刚学了python网络编程,书里没什么实践项目,只好到网上找点东西做. 一直对爬虫很好奇,所以不妨从爬虫先入手吧. Python版本:3.6 这是我看的教程:Python - Jack -Cui ...

  9. Python 爬虫-爬取京东手机页面的图片

    具体代码如下: __author__ = 'Fred Zhao' import requests from bs4 import BeautifulSoup import os from urllib ...

随机推荐

  1. Web前端:11个让你代码整洁的原则

    写Web页面就像我们建设房子一样,地基牢固,房子才不会倒.同样的,我们制作Web页面也一样,一个良好的HTML结构是制作一个美丽的网站的开始,同样的,良好的CSS只存在同样良好的HTML中,所以一个干 ...

  2. Flask 教程

    官方文档 推荐教程 环境 pip install virtualenv cd proj_fold virtualenv venv . venv/bin/activate for *unix or ve ...

  3. JS:event对象下的target属性和取消冒泡事件

    1.target 通过获取DOM元素 var box = document.getElementById("box"); document.box.onclick = functi ...

  4. GridView点击行触发SelectedIndexChanged事件

    1.在<% @Page ...... %>指令中添加 EnableEventValidation="false" 2.在RowDataBound事件中添加 protec ...

  5. Unity3D连接sqlite数据库操作C#版

    unity3d有自己对应的sqlite.dll分别需要三个文件 1.Mono.Data.Sqlite.dll 在unity安装文件“Unity\Editor\Data\MonoBleedingEdge ...

  6. WAF攻防研究之四个层次Bypass WAF

    从架构.资源.协议和规则4个层次研究绕过WAF的技术,助于全方位提升WAF防御能力. 绕过WAF的相关技术研究是WAF攻防研究非常重要的一部分,也是最有趣的部分,所以我在写WAF攻防时先写攻击部分.还 ...

  7. 《Linux内核设计与实现》读书笔记 第五章 系统调用

    第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...

  8. swift-UserDefaults控制账号和密码

    import UIKit class FiveVC: UIViewController { //MARK:-------- 全局 常量 设置 let IsFirstLaunch = "IsF ...

  9. Sharepoint client model 中出现Cannot invoke HTTP DAV request. There is a pending query 的解决办法

    由于近期在某项目中使用sharepoint client 对象模型做项目 在sharepoint 2010环境下正常,但迁移到sharepoint 2013后报错,提示如下 Cannot invoke ...

  10. 一个修改过简化版的InputQuery

    主要是觉得在单输入的情况下, 原来InputQuery输入框左边的文本太难看了...... function _InputQuery(const ACaption: string; const APr ...