吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12715|回复: 45
收起左侧

[原创工具] 百度贴吧图片单线程python爬虫2015年8月21日20:59:35 重大更新可直接下载图片

[复制链接]
wgmm999 发表于 2015-8-18 23:05
本帖最后由 wgmm999 于 2015-8-21 23:26 编辑
本人小白从学到做只占用了6天左右的休息时间  代码肯定有问题  求轻喷

这是第一版 第二版在下面
先上干货 啪啪啪.7z (1.02 KB, 下载次数: 76)
捕获.PNG
[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 更新图片正则 : 正则1.PNG
大数据显示 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爬虫的最基本的东西(虽然还没添加



免费评分

参与人数 7威望 +1 热心值 +7 收起 理由
wwpp + 1 谢谢@Thanks!
jiaxingseo + 1 像楼主学习
盛夏的剩下 + 1 已答复!
bet365china + 1 谢谢@Thanks!
宿命中的塔罗牌 + 1 我很赞同!
蜂窝煤 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Ericky + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

狼魂 发表于 2015-8-19 08:33
本帖最后由 狼魂 于 2015-8-19 08:41 编辑

把链接抓出来后,后面加上个函数,num是一个标记,用来给图片命名用的
[Python] 纯文本查看 复制代码
def down_pic(num,url):
    path = os.getcwd()+'\\pic\\'
    if not os.path.isdir(path):
        os.mkdir(path)
    path = path+str(num)+'.jpg'   
    urllib.urlretrieve(url,path) #下载图片其实就是这一行,一个下载链接,和一个需要保存的地址
补充一点 需要在前面补充上这俩模块
[Python] 纯文本查看 复制代码
import os
import urllib


 楼主| wgmm999 发表于 2015-8-19 12:18 来自手机
狼魂 发表于 2015-8-19 08:33
把链接抓出来后,后面加上个函数,num是一个标记,用来给图片命名用的
[mw_shl_code=python,true]def down_pi ...

谢谢指点  晚上我去试试
 楼主| wgmm999 发表于 2015-8-18 23:06
拯救网瘾少年 发表于 2015-8-18 23:11
有什么用??
diana 发表于 2015-8-18 23:34
感谢分享
A00 发表于 2015-8-19 00:12
见证一下你的成绩
A00 发表于 2015-8-19 00:16
见证一下你的成绩
Cizel 发表于 2015-8-19 00:41
加个好友,以后做一些交流。正打算学习python
吾爱廖小雨 发表于 2015-8-19 00:50
加个好友,以后做一些交流。正打算学习python
zkagcj 发表于 2015-8-19 06:24
好厉害呀。。。
zhongwenwen 发表于 2015-8-19 06:50
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表