<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【開(kāi)放源代碼】微博搜索用戶爬蟲(chóng)

          共 3416字,需瀏覽 7分鐘

           ·

          2021-10-26 15:11

          點(diǎn)擊上方?月小水長(zhǎng)?并?設(shè)為星標(biāo),第一時(shí)間接收干貨推送

          這是?月小水長(zhǎng)?的第?93?篇原創(chuàng)干貨

          目前公眾號(hào)平臺(tái)改變了推送機(jī)制,點(diǎn)“贊”、點(diǎn)“在看”、添加過(guò)“星標(biāo)”的同學(xué),都會(huì)優(yōu)先接收到我的文章推送,所以大家讀完文章后,記得點(diǎn)一下“在看”和“贊”。
          保證閱讀體驗(yàn),文中廣告已關(guān)閉~

          超級(jí)方便的微博用戶信息爬蟲(chóng) 是根據(jù)微博用戶 Uid 來(lái)抓取公開(kāi)的用戶微博信息,但是很多時(shí)候,我們可能只知道這個(gè)用戶的微博名字,并不知道 Uid,本次開(kāi)放的爬蟲(chóng)就是完成從微博用戶名到 Uid 的轉(zhuǎn)換。



          該爬蟲(chóng)抓取的接口是 https://s.weibo.com/user需要該接口下最好是已登錄的 cookie。主要抓取邏輯如下,可以像 不寫(xiě)一行,自動(dòng)生成爬蟲(chóng)代碼 文章里說(shuō)的那樣自動(dòng)生成該部分代碼。

          def getUidByName(name):    # https://s.weibo.com/user?q=%E6%B5%8B%E8%AF%95&Refer=weibo_user????cookie?=?'復(fù)制上面接口登錄后的 cookie'

          headers = { 'Connection': 'keep-alive',????????'Cache-Control':?'max-age=0', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Referer': 'https://s.weibo.com/weibo?q=%E6%B5%8B%E8%AF%95', 'Accept-Language': 'zh-CN,zh;q=0.9,en-CN;q=0.8,en;q=0.7,es-MX;q=0.6,es;q=0.5', 'cookie': cookie }
          params = { 'q': name, 'Refer': 'weibo_user',????}????response?=?requests.get('https://s.weibo.com/user',?headers=headers,?params=params) return parseResponse(response)

          拿到 response 后稍微解析一下就能拿到 Uid,如果出錯(cuò)或者沒(méi)有搜索到,Uid 返回 -1

          def parseResponse(response):    html = etree.HTML(response.text)    users = html.xpath('//div[starts-with(@class,"card card-user-b")]/div[@class="info"]/div/a[last()-1]/@href')    if len(users) == 0:        return -1    temp = users[0]    uid = temp[temp.rindex('/') + 1:]    return uid

          類(lèi)比用戶信息爬蟲(chóng),很自然而然想到需要有批量抓取的需求,所以同時(shí)寫(xiě)了個(gè)批量處理的邏輯如下:

          def dfAddUserLink(file_path, user_name_cloumn, user_link_column='user_link', finish_column='finish'):    df = pd.read_csv(file_path)    if not finish_column in df.columns.values.tolist():        df[finish_column] = [False for _ in range(df.shape[0])]        df[user_link_column] = ['' for _ in range(df.shape[0])]    df.to_csv(file_path, index=False, encoding='utf-8-sig')
          consist = 0 consist_limit = 3 for index, row in df.iterrows(): print(f'{index+1}/{df.shape[0]}') if row[finish_column] == True: continue
          uid = getUidByName(row[user_name_cloumn]) if uid == -1: consist += 1 if consist >= consist_limit: print('請(qǐng)檢查是否需要換 cookie') df.to_csv(file_path, index=False, encoding='utf-8-sig') break else: consist = 0 user_link = f"https://weibo.com/u/{uid}" print(user_link)
          df.loc[index, user_link_column] = user_link df.loc[index, finish_column] = True if index % 10 == 0: df.to_csv(file_path, index=False, encoding='utf-8-sig')

          它會(huì)自動(dòng)根據(jù)指定路徑下的 csv 文件里的用戶名抓取用戶鏈接并保存到 csv 中,連續(xù)出錯(cuò)三次則需要 check 下是否出錯(cuò)比如 cookie 失效,如果需要抓取的 csv 文件里面行數(shù)過(guò)多,一次性爬不完也沒(méi)有關(guān)系,每抓 10 個(gè)自動(dòng)保存一次,由于新加了個(gè) finish 標(biāo)志字段,下次運(yùn)行會(huì)從上次爬到的地方繼續(xù)

          比如我們有一個(gè) test.csv ,其中用戶名信息在 user_name 列,我們可以這樣調(diào)用。

          dfAddUserLink('test.csv',?user_name_column='user_name')

          代碼地址在:

          https://github.com/Python3Spiders/WeiboSuperSpider/blob/master/%E6%97%A0%20GUI%20%E5%8A%9F%E8%83%BD%E7%8B%AC%E7%AB%8B%E7%89%88/WeiboUserScrapy.py

          文末 閱讀原文 直達(dá)。

          最后依舊是微博話題爬蟲(chóng)的日常更新,修復(fù)了群里朋友提出的若干問(wèn)題,提升了穩(wěn)定性。可以去 2021 新版微博話題爬蟲(chóng)發(fā)布 獲取最新的微博話題爬蟲(chóng)。

          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码不卡 | 人妻97 | 国产精品伦理一区 | 国产一级a毛一级a看免费漫画 | 神马午夜国产精品 |