• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python模拟登录微博并爬取表情包

    一、开发工具

    **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的措施主要有以下几点:

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

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

    运行方式:

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

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

    您可能感兴趣的文章:
    • Python基于百度AI实现抓取表情包
    • Python实现微信表情包炸群功能
    • Python基础进阶之海量表情包多线程爬虫功能的实现
    • Python自动生产表情包
    • python实战之制作表情包游戏
    上一篇:allure结合python生成测试报告教程
    下一篇:如何利用AJAX获取Django后端数据详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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