五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

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

發(fā)布日期:2022-03-24 09:13 | 文章來源:CSDN

一、開發(fā)工具

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

相關(guān)模塊:

DecryptLogin模塊;

argparse模塊;

requests模塊;

prettytable模塊;

tqdm模塊;

lxml模塊;

fake_useragent模塊;

以及一些Python自帶的模塊。

二、環(huán)境搭建

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

三、原理簡介

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

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

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

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

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

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

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

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

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

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的措施主要有以下幾點:

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

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

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

大體的思路就是這樣,因為其實沒啥難點,就是用xpath來提取我們需要的信息就行了,所以就這么粗略地介紹一下吧。T_T

運行方式:

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

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

香港服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部