欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python模擬登錄微博并爬取表情包

 更新時(shí)間:2021年06月03日 08:52:58   作者:weixin_43649691  
前段時(shí)間爬取的知乎表情包用完了嗎?今天再帶大家去微博爬一波表情包吧.文中有非常詳細(xì)的代碼示例,廢話不多說,讓我們愉快地開始吧,需要的朋友可以參考下

一、開發(fā)工具

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

相關(guān)模塊:

DecryptLogin模塊;

argparse模塊;

requests模塊;

prettytable模塊;

tqdm模塊;

lxml模塊;

fake_useragent模塊;

以及一些Python自帶的模塊。

二、環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

三、原理簡介

本來這個(gè)爬蟲是想作為講python異步爬蟲的一個(gè)例子的,昨天代碼寫完測(cè)試了一下,結(jié)果是我微博賬號(hào)和ip都直接被封了(并發(fā)數(shù)設(shè)的500)。

然后我去谷歌搜了一下別人寫的異步爬蟲教程,測(cè)試用的都是些沒啥反爬措施的小網(wǎng)站。

于是今天改了下代碼,就先整個(gè)普普通通的微博小爬蟲算了。

言歸正傳,和之前的微博爬蟲類似,我們還是先利用DecryptLogin進(jìn)行微博賬戶的模擬登錄:

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

然后讓使用者輸入目標(biāo)微博用戶的id:

user_id = input('請(qǐng)輸入目標(biāo)用戶ID(例如: 2168613091) ——> ')

微博用戶id在這可以看到:

圖片

根據(jù)用戶輸入的微博用戶id,我們?cè)L問如下兩個(gè)鏈接:

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

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

圖片

圖片

打印這些信息,讓使用者確認(rèn)自己輸入的微博用戶id是否無誤:

tb = prettytable.PrettyTable()
tb.field_names = ['用戶名', '關(guān)注數(shù)量', '被關(guān)注數(shù)量', '微博數(shù)量', '微博頁數(shù)']
tb.add_row([nickname, num_followings, num_followers, num_wbs, num_wb_pages])
print('獲取的用戶信息如下:')
print(tb)
is_download = input('是否爬取該微博用戶發(fā)的所有圖片?(y/n, 默認(rèn): y) ——> ')

如果無誤,就開始爬取該用戶發(fā)的所有微博里的圖片:

'''下載所有圖片'''
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
    # --避免給服務(wù)器帶來過大壓力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的措施主要有以下幾點(diǎn):

  • 每爬n頁數(shù)據(jù)就暫停x秒,其中n是隨機(jī)生成的,且n一直在變化,x也是隨機(jī)生成的,且x也一直在變化;
  • 下載圖片時(shí),使用隨機(jī)的ua,并且不使用登錄后的session來請(qǐng)求圖片鏈接來下載該圖片。

從返回的微博頁內(nèi)容里提取圖片鏈接時(shí),需要注意:

  • 對(duì)轉(zhuǎn)發(fā)微博的微博id和原創(chuàng)微博的微博id提取方式不同;
  • 只有單張圖片的微博和有多張圖片的微博提取圖片鏈接的方式是不同的;
  • 有時(shí)候圖片鏈接提取會(huì)出錯(cuò),http變成了ttp,所以需要對(duì)提取的圖片鏈接進(jìn)行后處理,然后再去請(qǐng)求這些鏈接來下載圖片。

大體的思路就是這樣,因?yàn)槠鋵?shí)沒啥難點(diǎn),就是用xpath來提取我們需要的信息就行了,所以就這么粗略地介紹一下吧。T_T

運(yùn)行方式:

python weiboEmoji.py --username 用戶名 --password 密碼

到此這篇關(guān)于Python模擬登錄微博并爬取表情包的文章就介紹到這了,更多相關(guān)Python爬取微博表情包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Python中實(shí)現(xiàn)shuffle給列表洗牌

    在Python中實(shí)現(xiàn)shuffle給列表洗牌

    今天小編就為大家分享一篇在Python中實(shí)現(xiàn)shuffle給列表洗牌,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python使用?f?格式化字符串的用法

    python使用?f?格式化字符串的用法

    f-string采用 {content:format} 設(shè)置字符串格式,其中content是替換并填入字符串的內(nèi)容,可以是變量、表達(dá)式或函數(shù)等,format 是格式描述符,這篇文章主要介紹了python使用?f?格式化字符串,需要的朋友可以參考下
    2022-12-12
  • 詳解Python如何使用Netmiko進(jìn)行文件傳輸

    詳解Python如何使用Netmiko進(jìn)行文件傳輸

    Netmiko是一個(gè)用于連接和管理各種網(wǎng)絡(luò)設(shè)備的Python庫,它是Paramiko的一個(gè)擴(kuò)展。本文就來講講如何利用Netmiko實(shí)現(xiàn)文件傳輸功能吧
    2023-05-05
  • Python實(shí)現(xiàn)Linux的find命令實(shí)例分享

    Python實(shí)現(xiàn)Linux的find命令實(shí)例分享

    本文給大家分享的是使用python簡單實(shí)現(xiàn)模擬linux的find命令的實(shí)例代碼,推薦給大家,希望大家能夠喜歡
    2017-06-06
  • 基于Python把網(wǎng)站域名解析成ip地址

    基于Python把網(wǎng)站域名解析成ip地址

    這篇文章主要介紹了基于Python把網(wǎng)站域名解析成ip地址,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python截圖并保存的具體實(shí)例

    Python截圖并保存的具體實(shí)例

    在本篇文章里小編給大家分享了一篇關(guān)于Python截圖并保存的具體實(shí)例,對(duì)此有興趣的朋友們可以參考下。
    2021-01-01
  • Python基于釘釘監(jiān)控發(fā)送消息提醒的實(shí)現(xiàn)

    Python基于釘釘監(jiān)控發(fā)送消息提醒的實(shí)現(xiàn)

    本文主要介紹了Python基于釘釘監(jiān)控發(fā)送消息提醒的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • PyTorch中permute的基本用法示例

    PyTorch中permute的基本用法示例

    pytorch中的permute就像是numpy中的transpose()函數(shù)一樣,根據(jù)指定的維度進(jìn)行轉(zhuǎn)置,下面這篇文章主要給大家介紹了關(guān)于PyTorch中permute的基本用法,需要的朋友可以參考下
    2022-04-04
  • Python爬蟲常用庫的安裝及其環(huán)境配置

    Python爬蟲常用庫的安裝及其環(huán)境配置

    今天小編就為大家分享一篇關(guān)于python爬蟲常用庫的安裝及其環(huán)境配置的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-09-09
  • Python實(shí)現(xiàn)提取XML內(nèi)容并保存到Excel中的方法

    Python實(shí)現(xiàn)提取XML內(nèi)容并保存到Excel中的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)提取XML內(nèi)容并保存到Excel中的方法,涉及Python針對(duì)xml文件的讀取、解析以及Excel文件的寫入、保存等相關(guān)操作技巧,需要的朋友可以參考下
    2018-09-09

最新評(píng)論