一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python模擬登錄微博并爬取表情包

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

2021-11-21 12:04weixin_43649691 Python

前段時間爬取的知乎表情包用完了嗎?今天再帶大家去微博爬一波表情包吧.文中有非常詳細的代碼示例,廢話不多說,讓我們愉快地開始吧,需要的朋友可以參考下

一、開發工具

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

相關模塊:

DecryptLogin模塊;

argparse模塊;

requests模塊;

prettytable模塊;

tqdm模塊;

lxml模塊;

fake_useragent模塊;

以及一些Python自帶的模塊。

二、環境搭建

安裝Python并添加到環境變量,pip安裝需要的相關模塊即可。

三、原理簡介

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

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

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

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

?
1
2
3
4
5
6
'''模擬登錄'''
@staticmethod
def login(username, password):
  lg = login.Login()
  _, session = lg.weibo(username, password, 'mobile')
  return session

然后讓使用者輸入目標微博用戶的id:

?
1
user_id = input('請輸入目標用戶ID(例如: 2168613091) ——> ')

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

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

根據用戶輸入的微博用戶id,我們訪問如下兩個鏈接:

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

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

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

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

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

?
1
2
3
4
5
6
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) ——> ')

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'''下載所有圖片'''
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

運行方式:

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

到此這篇關于Python模擬登錄微博并爬取表情包的文章就介紹到這了,更多相關Python爬取微博表情包內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_43649691/article/details/117455878

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人午夜免费视频 | 特黄特级毛片免费视 | www久久久| 女子监狱第二季在线观看免费完整版 | 国产精品日韩欧美一区二区 | 国产香蕉一区二区精品视频 | 欧美高清在线精品一区 | 精品国产91高清在线观看 | 免费国产影视观看网站入口 | xxx中国bbbwww | 四虎成人4hutv影院 | 成人在线播放 | 91碰| 免费高清视频免费观看 | 丝袜老师好湿好紧我要进去了 | 午夜大片在线观看 | 久久精品无码一区二区日韩av | 无遮挡h肉动漫在线观看电车 | 日出水了特别黄的视频 | 成人在线视频在线观看 | 日韩视频在线精品视频免费观看 | 男人叼女人的痛爽视频免费 | 国产亚洲精品网站 | gangbang日本 | 精品国产欧美一区二区五十路 | 久久91精品国产91久久户 | 婷婷久久热99在线精品 | 亚洲 欧美 中文 日韩 视频 | 亚洲欧美另类综合 | 日本高清免费看 | 波多野结在线 | 国产区成人综合色在线 | 色综合中文字幕天天在线 | 亚洲男女在线 | 亚洲国产成人久久综合一区 | 三级黄色片在线免费观看 | 日本视频在线免费播放 | 欧美折磨另类系列sm | 国色天香视频资源网 | 亚洲国产精品二区久久 | 幻女free性zozo交体内谢 |