Python模拟登录微博并爬取表情包

 更新时间:2021年06月03日 08:52:58   作者:weixin_43649691  
前段时间爬取的知乎表情包用完了吗?今天再带大家去微博爬一波表情包吧.文中有非常详细的代码示例,废话不多说,让我们愉快地开始吧,需要的朋友可以参考下

一、开发工具

**Python****版本:**3.6.4

相关模块:

DecryptLogin模块;

argparse模块;

requests模块;

prettytable模块;

tqdm模块;

lxml模块;

fake_useragent模块;

以及一些Python自带的模块。

二、环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

三、原理简介

本来这个爬虫是想作为讲python异步爬虫的一个例子的,昨天代码写完测试了一下,结果是我微博账号和ip都直接被封了(并发数设的500)。

然后我去谷歌搜了一下别人写的异步爬虫教程,测试用的都是些没啥反爬措施的小网站。

于是今天改了下代码,就先整个普普通通的微博小爬虫算了。

言归正传,和之前的微博爬虫类似,我们还是先利用DecryptLogin进行微博账户的模拟登录:

'''模拟登录'''
@staticmethod
def login(username, password):
  lg = login.Login()
  _, session = lg.weibo(username, password, 'mobile')
  return session

然后让使用者输入目标微博用户的id:

user_id = input('请输入目标用户ID(例如: 2168613091) ——> ')

微博用户id在这可以看到:

图片

根据用户输入的微博用户id,我们访问如下两个链接:

url = f'https://weibo.cn/{user_id}'
url = f'https://weibo.cn/{user_id}/info'

然后利用xpath提取用户的基本信息:

图片

图片

打印这些信息,让使用者确认自己输入的微博用户id是否无误:

tb = prettytable.PrettyTable()
tb.field_names = ['用户名', '关注数量', '被关注数量', '微博数量', '微博页数']
tb.add_row([nickname, num_followings, num_followers, num_wbs, num_wb_pages])
print('获取的用户信息如下:')
print(tb)
is_download = input('是否爬取该微博用户发的所有图片?(y/n, 默认: y) ——> ')

如果无误,就开始爬取该用户发的所有微博里的图片:

'''下载所有图片'''
def __downloadImages(self, userinfos, savedir):
  # 一些必要的信息
  num_wbs = userinfos.get('num_wbs')
  user_id = userinfos.get('user_id')
  num_wb_pages = userinfos.get('num_wb_pages')
  # 提取图片链接并下载图片
  page_block_size = random.randint(1, 5)
  page_block_count = 0
  for page in tqdm(range(1, num_wb_pages+1)):
    # --提取图片链接
    response = self.session.get(f'https://weibo.cn/{user_id}?page={page}', headers=self.headers)
    image_urls = self.__extractImageUrls(response)
    # --下载图片
    for url in image_urls:
      try:
        res = requests.get(url, headers={'user-agent': self.ua.random}, stream=True)
        with open(os.path.join(savedir, url.split('/')[-1]), 'wb') as fp:
          for chunk in res.iter_content(chunk_size=32):
            fp.write(chunk)
        print('[INFO]: Download an image from: ', url)
      except:
        pass
    # --避免给服务器带来过大压力and避免被封, 每爬几页程序就休息一下
    page_block_count += 1
    if page_block_count % page_block_size == 0:
      time.sleep(random.randint(6, 12))
      page_block_size = random.randint(1, 5)
      page_block_count = 0

这里避免爬虫被BAN的措施主要有以下几点:

  • 每爬n页数据就暂停x秒,其中n是随机生成的,且n一直在变化,x也是随机生成的,且x也一直在变化;
  • 下载图片时,使用随机的ua,并且不使用登录后的session来请求图片链接来下载该图片。

从返回的微博页内容里提取图片链接时,需要注意:

  • 对转发微博的微博id和原创微博的微博id提取方式不同;
  • 只有单张图片的微博和有多张图片的微博提取图片链接的方式是不同的;
  • 有时候图片链接提取会出错,http变成了ttp,所以需要对提取的图片链接进行后处理,然后再去请求这些链接来下载图片。

大体的思路就是这样,因为其实没啥难点,就是用xpath来提取我们需要的信息就行了,所以就这么粗略地介绍一下吧。T_T

运行方式:

python weiboEmoji.py --username 用户名 --password 密码

到此这篇关于Python模拟登录微博并爬取表情包的文章就介绍到这了,更多相关Python爬取微博表情包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pandas取dataframe特定行列的实现方法

    pandas取dataframe特定行列的实现方法

    大家在使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame,本文介绍了pandas取dataframe特定行列的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 如何在Django项目中引入静态文件

    如何在Django项目中引入静态文件

    这篇文章主要介绍了如何在Django项目中引入静态文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python机器学习NLP自然语言处理基本操作词向量模型

    Python机器学习NLP自然语言处理基本操作词向量模型

    本文是Python机器学习NLP自然语言处理系列文章,带大家开启一段学习自然语言处理 (NLP) 的旅程。本篇文章主要学习NLP自然语言处理基本操作词向量模型
    2021-09-09
  • python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

    python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

    这篇文章主要介绍了python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python中几个比较常见的名词解释

    Python中几个比较常见的名词解释

    这篇文章主要介绍了Python中几个比较常见的名词解释,本文解释同样适应其它编程语言,本文讲解了循环、迭代、递归、遍历等名词的含义,需要的朋友可以参考下
    2015-07-07
  • Python数据类型探索列表魔法世界

    Python数据类型探索列表魔法世界

    这篇文章主要为大家介绍了Python数据类型探索列表魔法世界,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python 牛顿法实现逻辑回归(Logistic Regression)

    python 牛顿法实现逻辑回归(Logistic Regression)

    这篇文章主要介绍了python 牛顿法实现逻辑回归(Logistic Regression),帮助大家更好的进行机器学习,感兴趣的朋友可以了解下
    2020-10-10
  • 基于python实现微信收红包自动化测试脚本(测试用例)

    基于python实现微信收红包自动化测试脚本(测试用例)

    这篇文章主要介绍了基于python实现微信收红包自动化测试脚本,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-07-07
  • Python爬虫防封ip的一些技巧

    Python爬虫防封ip的一些技巧

    这篇文章主要介绍了Python爬虫防封ip的一些技巧,对平时学习爬虫有所帮助,感兴趣的朋友可以了解下
    2020-08-08
  • python 巡检脚本的项目实践

    python 巡检脚本的项目实践

    本文主要介绍了python 巡检脚本的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04

最新评论