@python爬取微博配图相册,可自动获取sessionTOC
只需要设置你的用户名,密码和要爬取用户的UID即可。
wbname=“xxxx”
wbpwd=“xxxx”
uid = 1912992047

2019.06.19 增加多线程,此处提供一个轮子,速度比以前增加10倍

主要是按照自己的习惯优化和增加了自动获取session。
提升1:修改下根据python wb.py uid这样,就不需要每次打开py文件进行修改了。
提升2:自己增加断点功能(相同名字图片不会重复下载,无需开发)和
调用人脸识别进行颜值打分判断下载(百度人脸识别接口)。

困难1:登陆失败了一次,让我滑动按钮验证。验证完就又可以了,这个不知道怎么越过。遇到的人多的话,我再看吧。
https://m.weibo.cn/ 也可以首页登陆下,再执行脚本就可以了。

困难2:sso登录有时候会报错,应该属于登录接口自己的问题。等个几分钟再执行就好。
场景如下:
“‘NoneType’ object has no attribute ‘string’” “‘NoneType’ object has no attribute ‘text’”

如果还有什么想优化的地方,可以和我留言

1.当前目录下建 MulTool.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import queue
import threadingclass Worker(threading.Thread):    # 处理工作请求def __init__(self, workQueue, resultQueue, **kwds):threading.Thread.__init__(self, **kwds)self.setDaemon(True)self.workQueue = workQueueself.resultQueue = resultQueuedef run(self):while 1:try:callable, args, kwds = self.workQueue.get(False)    # get taskres = callable(*args, **kwds)self.resultQueue.put(res)    # put resultexcept queue.Empty:breakclass WorkManager:    # 线程池管理,创建def __init__(self, num_of_workers=10):self.workQueue = queue.Queue()    # 请求队列self.resultQueue = queue.Queue()    # 输出结果的队列self.workers = []self._recruitThreads(num_of_workers)def _recruitThreads(self, num_of_workers):for i in range(num_of_workers):worker = Worker(self.workQueue, self.resultQueue)    # 创建工作线程self.workers.append(worker)    # 加入到线程队列def start(self):for w in self.workers:w.start()def start(self):for w in self.workers:w.start()def wait_for_complete(self):while len(self.workers):worker = self.workers.pop()    # 从池中取出一个线程处理请求worker.join()if worker.isAlive() and not self.workQueue.empty():self.workers.append(worker)    # 重新加入线程池中#print("All jobs were complete.")def add_job(self, callable, *args, **kwds):self.workQueue.put((callable, args, kwds))    # 向工作队列中加入请求def get_result(self, *args, **kwds):return self.resultQueue.get(*args, **kwds)

2 weibo.py 的内容

#coding:gbk
import os
import re
import sys
import time
import json
import requests
import MulTool
from bs4 import BeautifulSoup as bs#uid即进入对方微博主页后网址部分/u/后的那一串数字
#https://weibo.cn/u/1912992047?page=1
wbname=“xxx”
wbpwd=“xxx”
uid = 1912992047
url = 'https://weibo.cn/u/' + str(uid)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0','Content-Type': 'application/x-www-form-urlencoded','Referer': 'https://passport.weibo.cn/signin/login','Connection': 'close','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'}pictrue_num = 0 #当前已爬取的图片总数
Loginsession = requests.session()def GetPageAddr():GetSession()r = Loginsession.get(url, headers=headers)soup = bs(r.text, 'lxml')# 所访问的微博用户名weibo_user_name = soup.find('title').text.replace(u'的微博', '')# 存放图片的根目录rootDir = 'D://微博配图相册//' + weibo_user_name + '//'if not os.path.exists(rootDir):os.makedirs(rootDir)# 微博总页数,通过审查元素可知totalPage = int(soup.find('input', attrs={'name':'mp'}).attrs['value'])print('总共检测到%d页微博页面' % totalPage)for pagenum in range(1,totalPage+1):GetPageItems(rootDir,pagenum)print('总共爬取了%d张图片,存放在%s目录下' % (pictrue_num, rootDir))def GetPageItems(dirpath,pagenum):# 每页微博的URL的列表weibo_url = url + '?page=' + str(pagenum)r = Loginsession.get(weibo_url, headers=headers)soup = bs(r.text, 'lxml')#每条微博所对应的标签代码块列表weibo_tags_list = soup.find_all('div', attrs={'class': 'c'}, id=True)wma = MulTool.WorkManager(8)#微博发送时间与微博配图的字典for u in range(len(weibo_tags_list)):print('正在爬取第%d页第%d条微博' % (pagenum, u + 1))wma.add_job(GetOneAlbum,dirpath,weibo_tags_list[u])wma.start()wma.wait_for_complete()print('第%d页微博爬取完毕,开始生成图片' % (pagenum))def GetOneAlbum(dirpath,weibo_tag):       #获取微博发送时间try:hms = ' '.join(weibo_tag.find('span', attrs={'class': 'ct'}).string.replace('\xa0', ' ').replace(':', '-').split(' ')[:2])except:hms = ' '.join(weibo_tag.find('span', attrs={'class': 'ct'}).text.replace('\xa0', ' ').replace(':', '-').split(' ')[:2])if weibo_tag.find('span', attrs={'class': 'cmt'}):print("转发\n")#return; #本行如果注释掉就和下载转发的微博t=1    #该条微博若带有组图,获取组图中所有图片的URLif weibo_tag.find('a', text=re.compile('组图')):imgs_url = weibo_tag.find('a', text=re.compile('组图')).attrs['href']html = Loginsession.get(imgs_url, headers=headers)imgs_soup = bs(html.text, 'html.parser')imgs_tags_List = imgs_soup.find_all('img', alt='图片加载中...')img_urls_list = [imgs_tag.attrs['src'].replace('thumb180', 'large') for imgs_tag in imgs_tags_List]#imgs_urls_dic[hms] = img_urls_list#该条微博仅有一张配图,或者没有图片,获取图片的URLelse:img_tags_List = weibo_tag.find_all('img', alt='图片')img_urls_list = [img_tag.attrs['src'].replace('wap180', 'large') for img_tag in img_tags_List]#imgs_urls_dic[hms] = img_urls_listprint("该条微博还有%d 张图片" %len(img_urls_list))wmb = MulTool.WorkManager(6)for u in range(len(img_urls_list)):wmb.add_job(SaveImg,dirpath,hms,img_urls_list[u],t)t=t+1wmb.start()wmb.wait_for_complete()def SaveImg(dirpath,hms,img_url,index):global pictrue_num#生成图片的存放路径,图片被命名为微博发送时间path = dirpath + hms#如果一条微博在同一时间发送了多张图片(即组图)的命名处理if(img_url[-3:]=="gif"):path = path + '-' + str(index+1)+'.gif'else:path = path + '-' + str(index+1)+'.jpg'try:if not os.path.exists(path):r = Loginsession.get(img_url)with open(path, 'wb') as f:f.write(r.content)pictrue_num = pictrue_num + 1time.sleep(1)else:print('%s已经存在' % path)pictrue_num = pictrue_num + 1print('success,成功爬取第%d张图片' % pictrue_num)except Exception as e:print('爬取失败,%s' % img_url)def GetSession():loginApi = 'https://passport.weibo.cn/sso/login'loginPostData = {'username':wbname,'password':wbpwd,'savestate':1,'r':'','ec':'0','pagerefer':'','entry':'mweibo','wentry':'','loginfrom':'','client_id':'','code':'','qq':'','mainpageflag':1,'hff':'','hfp':''}r = Loginsession.post(loginApi,data=loginPostData,headers=headers)try:if r.status_code == 200 and json.loads(r.text)['retcode'] == 20000000:print("successful")else:#print(r.status_code)#print(r.text)print("Logon failure!")except Exception as e:print(e)print("Logon failure2!")GetPageAddr();

主要参考:
https://blog.csdn.net/cool_flag/article/details/78992628

python3多线程爬取微博配图相册,可自动获取session【简单,快速】相关推荐

  1. python爬取微博配图

    平时没事就喜欢刷刷微博,追追星,关注关注娱乐圈动态顺便看看老婆们的最新动态,每次看到老婆们发的新图就很幸福,于是就想写个爬虫把老婆们的微博配图给爬下来,一般爬到的不是自拍就是表情包,还是收获满满的. ...

  2. 多线程爬取百度关键字结果,并获取真实url

    项目目的:练习 项目要求:根据给定的关键字,检索百度的结果,将结果保存到文件中 遇到问题: 1.python  list取值问题,有些看不清晰的,用for index, item in enumera ...

  3. python爬取微博恶评_Python爬取新浪微博评论数据,了解一下?

    开发工具 **Python版本:**3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装 ...

  4. python爬虫微博图片,pyhton爬虫爬取微博某个用户所有微博配图

    前几天写了个java爬虫爬花瓣网,但是事后总感觉不够舒服,终于在今天下午写了个python爬虫(爬微博图片滴),写完之后就感觉舒服了,果然爬虫就应该用python来写,哈哈(这里开个玩笑,非引战言论) ...

  5. 爬一个人的所有微博 python_pyhton爬虫爬取微博某个用户所有微博配图

    前几天写了个java爬虫爬花瓣网,但是事后总感觉不够舒服,终于在今天下午写了个python爬虫(爬微博图片滴),写完之后就感觉舒服了,果然爬虫就应该用python来写,哈哈(这里开个玩笑,非引战言论) ...

  6. python3爬虫系列16之多线程爬取汽车之家批量下载图片

    python3爬虫系列16之多线程爬取汽车之家批量下载图片 1.前言 上一篇呢,python3爬虫系列14之爬虫增速多线程,线程池,队列的用法(通俗易懂),主要介绍了线程,多线程,和两个线程池的使用. ...

  7. Selenium+Python3爬取微博我发出的评论信息

    Selenium+Python3爬取微博我发出的评论信息 需求 代码 注: 需求 记录对话信息:对话文本.时间.用户.被回复链接.被回复用户.被回复文本. 将数据信息持久化保存,可选择截图. 代码 # ...

  8. python3爬取微博评论并存为xlsx

    ** python3爬取微博评论并存为xlsx ** 由于微博电脑端的网页版页面比较复杂,我们可以访问手机端的微博网站,网址为:https://m.weibo.cn/ 一.访问微博网站,找到热门推荐链 ...

  9. Selenium+Python3爬取微博私信

    Selenium+Python3爬取微博私信 需求 缺陷 代码 需求 爬取微博私信信息,包括:文本.对话者信息.图片路径,并将截图.文本留存. 缺陷 微博私信网页长时间查看时,经常有刷新失败.页面崩溃 ...

  10. python3爬虫之多线程爬取英雄联盟所有皮肤图片

    python3爬虫之多线程爬取英雄联盟所有皮肤图片 线程不要太高,容易出错,大约用时1分钟左右. import requests import json import os import thread ...

最新文章

  1. Citrix XenApp 下载及一年 developer license 获取
  2. python学习之--习题集
  3. 《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记
  4. C---蝉、蜻蜓、蜘蛛
  5. Android开发;Activity-Hook你了解多少?一起来debug
  6. “约见”面试官系列之常见面试题之第九十九篇之router的钩子函数(建议收藏)
  7. Servlet,HTTP,Ruquest,Response
  8. mysql-练习的数据准备
  9. spring 事务_极限 Spring (4) Spring 事务
  10. OSPF建立邻居、邻接关系 学习笔记
  11. 小米8SE 解BL锁教程 申请BootLoader解锁教程
  12. 利用MATLAB解特征方程,并画出特征根的分布,便于分析系统的稳定性
  13. Fate Decision剧本
  14. linux查询日志grep,linux grep日志查询
  15. 移动端--web开发
  16. Python中str和repr的区别
  17. 平凡之路上,请不要后会无期
  18. 从理解需求到创造需求,解码YUU品牌成功秘诀
  19. 牛肉饺子馅的做法 既简单又美味
  20. 医学遗传学词汇英语术语英文(Glossary) 6

热门文章

  1. ESP-12F 烧录方法
  2. sorry, unimplemented: non-trivial designated initializers not supported
  3. android陀螺仪方向,android – 如何使用罗盘读数和陀螺仪读数获取手机的方位角?...
  4. 1200PLC学习资料整理
  5. Java中强、软、弱、虚引用
  6. 关于VMware ESX与VMware ESXi区别
  7. c语言打印七芒星图形代码,强强纯爱文,看过《C语言修仙》《七芒星》也别错过《狼行成双》...
  8. 7-4 疯狂星期四!!!!!
  9. 【今日学长】来自柚子帮学长--英国留学租房攻略!
  10. 从外包、互联网到国有企业,再到研究生拟录取,三年时间让我悟出了自己人生的意义