贴吧助手web版

 找回密码
 
搜索
查看: 529|回复: 0

[Python] 多线程贴吧图片爬虫

[复制链接]
     紫钻仅向指定用户开放  
  • TA的每日心情
    吃惊
    前天 11:22
  • 签到天数: 1229 天

    [LV.10]以坛为家III

    725

    主题

    1646

    帖子

    1645

    积分

    管理员

    Rank: 15Rank: 15Rank: 15Rank: 15

    金币
    4037

    接口达人工具作者土豪之星

    发表于 2021-1-31 10:04:39 | 显示全部楼层 |阅读模式
    最近在琢磨python爬虫,抱着学习的态度尝试写了一个

    经测试200张图片+重命名大概8秒




    格式不太规范哈(忽略)也遇到了些问题

    多线程futures下载的图片重命名1,2,3(出现了覆盖的问题)

    后来用time.time()+random.random()双随机来解决覆盖

    但肯定这是比较笨的方法,大家有什么好方法可以分享探讨一下

    1. import re
    2. import urllib.request
    3. import time
    4. from os import listdir,getcwd,rename
    5. from concurrent import futures
    6. import random

    7. def getHtml(url):
    8.     page = urllib.request.urlopen(url)
    9.     html = page.read()
    10.     return html

    11. def getImg(a):
    12.     reg = r'src="([.*\S]*.jpg)" size="'
    13.     imgre = re.compile(reg)
    14.     imglist = re.findall(imgre, a)
    15.     return imglist

    16. def getPage(a):
    17.     reg = r'共<span class="red">([\w]*)</span>页'
    18.     pagere = re.compile(reg)
    19.     pagelist = re.findall(pagere, a)
    20.     return pagelist

    21. start = time.time()
    22. url = "https://tieba.baidu.com/p/6279034183"
    23. html = getHtml(url)
    24. html = html.decode('UTF-8')
    25. page = getPage(html)[0]
    26. print("共{}页".format(page))
    27. imgList = []
    28. for i in range(1,int(page)+1):
    29.     html = getHtml(url+"?%0d" % i)
    30.     html = html.decode('UTF-8')
    31.     imgList += getImg(html)
    32. ##imgName = 0
    33. def saveOneImg(imgurl):
    34. ##    global imgName
    35. ##    print("现在下载第%0d张" %imgName)
    36.     name = "pic/"+str(time.time())+str(random.random())+".jpg"
    37.     print("download:"+name+"\n")
    38.     f = open(name, "wb")
    39.     f.write((urllib.request.urlopen(imgurl)).read())
    40.     f.close()
    41. ##    imgName += 1
    42. def saveManyImg(imgList):
    43.     with futures.ThreadPoolExecutor(10) as executor:
    44.         res = executor.map(saveOneImg, imgList)

    45. ##print(imgList[0])
    46. saveManyImg(imgList)
    47. print("重命名ing......")
    48. j=0
    49. for i in listdir(getcwd()+"//pic"):
    50.     rename("pic//"+i,"pic//"+str(j)+".jpg")
    51.     j+=1
    52. print("All Done!")
    53. stop = time.time()
    54. print(stop-start)
    复制代码





    上一篇:2021 百度贴吧顶贴,autojs脚本
    下一篇:[易语言] 模拟提交表单之贴吧回帖工具
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 |

    本版积分规则

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