本帖最后由 wgmm999 于 2015-8-21 23:26 编辑
本人小白从学到做只占用了6天左右的休息时间 代码肯定有问题 求轻喷
这是第一版 第二版在下面
先上干货
啪啪啪.7z
(1.02 KB, 下载次数: 76)
[Python] 纯文本查看 复制代码 # coding=gbk
import re
import requests
import sys
'''
搞笑图片吧地址= http://tieba.baidu.com/f?kw=%E6%90%9E%E7%AC%91%E5%9B%BE%E7%89%87&ie=utf-8&pn=0 pn为页数 以50递增
正则最大页数(utf-8&pn=(.*?)" class=) 取最后一个值
标题=(title="(.*?)" target=)
帖子地址=’http://tieba.baidu.com/p/‘ +("/p/(.*?)" title)
帖子中的总页数=("red">(>*?)</span>)取一次即可
帖子地址中的换页地址=’http://tieba.baidu.com/p/‘+帖子编号+’?pn=‘
帖子中的图片地址=(src="(.*?).jpg" pic)
应该去除’[img]http://tb2.bdstatic.com/tb/static-pb/img/head_80.jpg[/img]‘的链接全为无头像地址
'''
reload(sys)
sys.setdefaultencoding('utf8')
lj = open('lj.txt', 'w')
def zlj(ys):
# 获取当时页数中的全部帖子链接
text = requests.get('http://tieba.baidu.com/f?kw=%E6%90%9E%E7%AC%91%E5%9B%BE%E7%89%87&ie=utf-8&pn=' + str(ys))
tzlj = re.findall('"/p/(.*?)" title', text.text)
return tzlj
def tzys(url):
url = 'http://tieba.baidu.com/p/'+str(url)
text = requests.get(str(url))
ls3 = re.findall('"red">(.*?)</span>', text.text,) # 取出帖子中最大的页数
return ls3[0]
def tztp(url): # 获取帖子中的jpg图片链接
ls3 = tzys(url)
q = 1
while q != int(ls3)+1:
text = requests.get('http://tieba.baidu.com/p/'+str(url)+'?pn='+str(q))
ls4 = re.findall('src="(.*?).jpg" pic',text.text)
w = 0
while w !=len(ls4):
lj.write(ls4[w]+'.jpg\n')
w+=1
ls4 = [0]
print str(url)+'一共'+str(ls3)+'页'
print 'http://tieba.baidu.com/p/'+str(url)+'?pn='+str(q)+'写入完成'
q+=1
text = requests.get('http://tieba.baidu.com/f?kw=%E6%90%9E%E7%AC%91%E5%9B%BE%E7%89%87&ie=utf-8&pn=0')
ls1 = re.findall('utf-8&pn=(.*?)" class=', text.text) # 获取贴吧内最大页数
a = 0
while a != len(ls1[-1]):
ls2 = zlj(a) # 返回当时页数中的所有帖子链接
for b in ls2:
tztp(b)
sys.stdout.flush()
a+=50
lj.close()
爬取某一吧的全部帖子链接 并且把帖子中的极大部分.jpg图片过滤下来
技术有限 只能生成下载链接2015-08-19 14:53:45 更新图片正则 :
大数据显示 http://imgsrc.baidu.com/forum/w%3D580/sign=(.*?).jpg" pic 这样的正则比较精准 原先的正则有时候会出来网页源代码
求各位指点 帮助改进
2015年8月21日20:24:48第二版 新加直接下载图片功能 修复了部分逻辑错误 修复显示错误
添加修改自己喜欢的贴吧的变量
添加下载路径的变量 可以指定到自己喜欢的目录上
添加异常处理机制
话说下载的时候这个[Asm] 纯文本查看 复制代码 urllib.ContentTooShortError: retrieval incomplete: got only 3145728 out of 4769892 bytes 怎么处理 百度说是编码问题?
@狼魂 感谢贴出下载示例
[Python] 纯文本查看 复制代码 # coding=gbk
import re
import requests
import sys
import os
import urllib
'''
搞笑图片吧地址= http://tieba.baidu.com/f?kw=%E6%90%9E%E7%AC%91%E5%9B%BE%E7%89%87&ie=utf-8&pn=0 pn为页数 以50递增
正则最大页数(utf-8&pn=(.*?)" class=) 取最后一个值
标题=(title="(.*?)" target=)
帖子地址=’http://tieba.baidu.com/p/‘ +("/p/(.*?)" title)
帖子中的总页数=("red">(.*?)</span>)取一次即可
帖子地址中的换页地址=’http://tieba.baidu.com/p/‘+帖子编号+’?pn=‘
帖子中的图片地址=(src="(.*?).jpg" pic)
应该去除’[img]http://tb2.bdstatic.com/tb/static-pb/img/head_80.jpg[/img]‘的链接全为无头像地址
'''
reload(sys)
sys.setdefaultencoding('gbk')
def zlj(ys,bt):
# 获取当时页数中的全部帖子链接
text = requests.get('http://tieba.baidu.com/f?kw='+str(bt)+'&ie=utf-8&pn=' + str(ys))
tzlj = re.findall('"/p/(.*?)" title', text.text)
return tzlj
def tzys(url):
url = 'http://tieba.baidu.com/p/'+str(url)
text = requests.get(str(url))
ls3 = re.findall('"red">(.*?)</span>', text.text,) # 取出帖子中最大的页数
return ls3
def tztp(url): # 获取帖子中的jpg图片链接
ls3 = tzys(url)
q = 1
while q != int(ls3[0])+1:
text = requests.get('http://tieba.baidu.com/p/'+str(url)+'?pn='+str(q))
ls4 = re.findall(r'http://imgsrc.baidu.com/forum/w%3D580/sign=(.*?).jpg" pic',text.text)
w = 0
while w !=len(ls4):
#lj.write(ls4[w]+'.jpg\n')
down_pic(ls4[w])
w+=1
print str(url)+'一共'+str(ls3[0])+',第'+str(q)+'页已经下载完成'
ls4 = [0]
q+=1
print str(url)+'下载完成'
def down_pic(url):
pic0 = 0#可以设置自己的目录
'''0为默认设置
1为主动设置'''
pic1 = re.sub('/','',url)
if pic0 == 0:
path = os.getcwd()+'\\pic\\'+str(pic1)+'.jpg'#获取运行目录
else:
path = '' #加入下载目录 注意 每个子目录前要加前两个// 比如 D:\\1\\2\\
path = path+str(pic1)+'.jpg'
#if not os.path.isdir(path):#判断是否为目录
# os.mkdir(path)#创建目录
# path = path+str(num)+'.jpg'
url = 'http://imgsrc.baidu.com/forum/w%3D580/sign='+str(url)+'.jpg'
try:
urllib.urlretrieve(url,path) #按照url进行下载,并以其文件名存储到本地目录
except:
print '程序出现一次异常,丢失部分链接'
#urllib.urlretrieve(url,path)#下载图片其实就是这一行,一个下载链接,和一个需要保存的地址
bt = '%E6%90%9E%E7%AC%91%E5%9B%BE%E7%89%87'#修改自己喜欢的贴吧链接 编码后的
text = requests.get('http://tieba.baidu.com/f?kw='+str(bt)+'&ie=utf-8&pn=50')
ls1 = re.findall('utf-8&pn=(.*?)" class=', text.text) # 获取贴吧内最大页数
a = 50
while a != len(ls1[-1]):
ls2 = zlj(a,bt) # 返回当时页数中的所有帖子链接
for b in ls2:
tztp(b)
a+=50
ls2=0
以后会在下面贴出一点python爬虫的最基本的东西(虽然还没添加)
|