狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

爬蟲實(shí)戰(zhàn):從HTTP請求獲取數(shù)據(jù)解析社區(qū)

admin
2024年3月27日 0:3 本文熱度 643

在過去的實(shí)踐中,我們通常通過爬取HTML網(wǎng)頁來解析并提取所需數(shù)據(jù),然而這只是一種方法。另一種更為直接的方式是通過發(fā)送HTTP請求來獲取數(shù)據(jù)。考慮到大多數(shù)常見服務(wù)商的數(shù)據(jù)都是通過HTTP接口封裝的,因此我們今天的討論主題是如何通過調(diào)用接口來獲取所需數(shù)據(jù)。

目前來看,大多數(shù)的http接口數(shù)據(jù)都采用restful風(fēng)格,通常使用JSON格式來發(fā)送和接收數(shù)據(jù)。對于那些對此不太了解的零基礎(chǔ)學(xué)者,建議先學(xué)習(xí)相關(guān)知識(shí)點(diǎn)。在本章學(xué)習(xí)過程中,我們將主要以騰訊云開發(fā)者社區(qū)作為主要平臺(tái),練習(xí)爬取接口數(shù)據(jù)。

接口爬取

接口爬取并不復(fù)雜,首先需要在瀏覽器中打開騰訊云社區(qū)的網(wǎng)頁,然后按下F12打開控制臺(tái),接著瀏覽控制臺(tái)中的請求數(shù)據(jù)接口,有些接口可能一眼難以識(shí)別,但通常可以跳過細(xì)致查看,因?yàn)樵陂_發(fā)過程中,最關(guān)鍵的是能從名稱中直觀理解其作用,大型公司通常設(shè)計(jì)得相當(dāng)清晰。我們首先嘗試爬取主頁的活動(dòng)數(shù)據(jù)。

image

我們可以選擇使用XHR來單獨(dú)查看請求,這樣就能排除掉頁面、js、css等無關(guān)的請求,逐個(gè)檢查接口,找到我們需要的內(nèi)容。這個(gè)特定接口就是我們必須記住的,其他的都是多余的。

便利工具

在這里,我們想向大家介紹一個(gè)非常實(shí)用的開發(fā)爬蟲工具,它就是https://curlconverter.com/

我是通過偶然的機(jī)會(huì)發(fā)現(xiàn)了這個(gè)工具的,它的確大大提升了我的爬蟲效率。通常情況下,當(dāng)我們找到了需要爬取的接口時(shí),我們需要編寫Python代碼來發(fā)起請求,可能還要處理各種請求頭和cookie,這一過程會(huì)消耗大量時(shí)間。而這個(gè)工具則幫助我們省去了這些繁瑣的步驟,使得整個(gè)過程變得更加高效。

首先,我們在后臺(tái)查找到目標(biāo)請求,然后通過右鍵點(diǎn)擊復(fù)制該請求。以Edge瀏覽器為例,具體操作如下所示:

image

在將內(nèi)容復(fù)制后,我們可以直接前往這個(gè)在線工具網(wǎng)站,將其粘貼進(jìn)去,從而生成相應(yīng)的Python代碼。這里以使用requests庫為例進(jìn)行演示。當(dāng)你瀏覽該網(wǎng)站時(shí),你可以選擇你喜歡的任何編程語言進(jìn)行相應(yīng)代碼的生成。

image

我們只需簡單地將其復(fù)制粘貼到IDE中,然后便可直接運(yùn)行代碼。

社區(qū)首頁

一旦我們掌握了這種方法,基本上就可以獲取想要爬取的所有數(shù)據(jù),只要避免頻繁請求而被識(shí)別為機(jī)器人爬蟲。讓我們首先嘗試爬取社區(qū)首頁的文章,以了解今年哪些類別的文章備受關(guān)注。以下是示例代碼:

import datetime
import requests

ad_list = []
article_list = []
article_total = 0
def get_article_list(pageNumber):
    global article_total,article_list
    ## 這里不需要cookie也是可以的。
    headers = {
        'authority''cloud.tencent.com',
        'accept''application/json, text/plain, */*',
        'accept-language''zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'content-type''application/json',
        'cookie''qcloud_uid=3db7bb7a1663470df3290f692c4a7206; language=zh; lastLoginIdentity=e382a0dd45ecf7f063e05751e7321e14; _ga_6WSZ0YS5ZQ=GS1.1.1685003902.1.1.1685004114.0.0.0; loginType=email; _ga_7PG2H0XLX2=GS1.2.1705284469.2.1.1705284470.59.0.0; lastLoginType=email; _gcl_au=1.1.315225951.1705902067; _ga_95GG3X2GMT=GS1.1.1707206895.14.0.1707212112.0.0.0; _ga=GA1.2.100014169188; mfaRMId=0092627a989e3ef79957c2257ea910f8; qcloud_from=qcloud.google.seo-1709083904498; qcstats_seo_keywords=%E5%93%81%E7%89%8C%E8%AF%8D-%E5%93%81%E7%89%8C%E8%AF%8D-%E8%85%BE%E8%AE%AF%E4%BA%91; from_column=20421; cpskey=1f39dac98ac4cc96c6503bdb4f49994f; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22100014169188%22%2C%22first_id%22%3A%221878e0e485111b-0be585a75d9ef-7e57547d-2073600-1878e0e4852ec0%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_utm_medium%22%3A%22ocpc%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTg3OGUwZTQ4NTExMWItMGJlNTg1YTc1ZDllZi03ZTU3NTQ3ZC0yMDczNjAwLTE4NzhlMGU0ODUyZWMwIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiMTAwMDE0MTY5MTg4In0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%22100014169188%22%7D%2C%22%24device_id%22%3A%221878e0e485111b-0be585a75d9ef-7e57547d-2073600-1878e0e4852ec0%22%7D; qcmainCSRFToken=NSsz_8Bfx1S_; qcloud_visitId=3e799aa8be55222ade40e7ab9b8be875; intl=; _gat=1; trafficParams=***%24%3Btimestamp%3D1710467373372%3Bfrom_type%3Dserver%3Btrack%3Da7699f0f-3309-4c6b-9740-475f6c5f11ba%3B%24***',
        'origin''https://cloud.tencent.com',
        'referer''https://cloud.tencent.com/developer',
        'sec-ch-ua''"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
        'sec-ch-ua-mobile''?0',
        'sec-ch-ua-platform''"Windows"',
        'sec-fetch-dest''empty',
        'sec-fetch-mode''cors',
        'sec-fetch-site''same-origin',
        'user-agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
    }

    json_data = {
        'pageNumber': pageNumber,
        'pageSize'100,
        'type''recommend'## 文章是否被推薦到首頁
    }

    response = requests.post(
        'https://cloud.tencent.com/developer/api/home/article-list',
        headers=headers,
        json=json_data,
    )
    news_list = response.json()
    for article in news_list['list']:
        ## 處理一下文章的類別
        handle_tag(article)
        ## 可以自己解析首頁的文章,只拿你想要的
        article_list.append({
            "article_title": article['title'],
            "article_date": article['createTime'],
            "article_summary": article['summary']
        })
    article_total = news_list['total']
    fixed_time = datetime.datetime(202311)
    timestamp = int(fixed_time.timestamp())
    print(f'{article_list[-1]["article_date"]}{timestamp}')
    ## 判斷一下是否已經(jīng)是最后一頁
    return 0 if article_list[-1]['article_date'] < timestamp else 1

def handle_tag(article):
    # 遍歷解析后的數(shù)據(jù),統(tǒng)計(jì)每個(gè)tagName的數(shù)據(jù)量
    for item in article['tags']:
        tag_name = item["tagName"]
        if tag_name in tag_counts:
            tag_counts[tag_name] += 1
        else:
            tag_counts[tag_name] = 1

def get_top_10():
    # 根據(jù)數(shù)據(jù)量對tagName進(jìn)行排序
    sorted_tag_counts = sorted(tag_counts.items(), key=lambda x: x[1], reverse=True)

    # 取前10個(gè)tagName
    top_10_tags = sorted_tag_counts[:10]

    # 打印前10個(gè)tagName的數(shù)據(jù)量統(tǒng)計(jì)
    for tag, count in top_10_tags:
        print(f"{tag}{count}")

page_num = 1
while True:
    num = get_article_list(page_num)
    page_num = page_num + 1
    if num == 0:
        break
    
get_top_10()

代碼首先通過API獲取文章列表數(shù)據(jù),然后遍歷每篇文章的標(biāo)簽信息,統(tǒng)計(jì)每個(gè)標(biāo)簽出現(xiàn)的次數(shù),最后輸出每個(gè)標(biāo)簽和其對應(yīng)的數(shù)據(jù)量。這樣可以幫助用戶了解哪些標(biāo)簽在文章中出現(xiàn)頻率較高。除了這些,我還額外處理輪播活動(dòng)的數(shù)據(jù),獲取更全面的活動(dòng)信息。

import datetime
import requests

ad_list = []
def get_ads():
    global ad_list
    headers = {
        'authority''cloud.tencent.com',
        'accept''application/json, text/plain, */*',
        'accept-language''zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'content-type''application/json',
        'origin''https://cloud.tencent.com',
        'referer''https://cloud.tencent.com/developer',
        'sec-ch-ua''"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
        'sec-ch-ua-mobile''?0',
        'sec-ch-ua-platform''"Windows"',
        'sec-fetch-dest''empty',
        'sec-fetch-mode''cors',
        'sec-fetch-site''same-origin',
        'user-agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
    }

    json_data = {
        'cate''cloud_banner',
        'preview'False
    }

    response = requests.post('https://cloud.tencent.com/developer/api/common/getAds', headers=headers, json=json_data)
    news_list = response.json()
    ad_list = [{'pcTitle': item['content']['pcTitle'], 'url': item['content']['url']} for item in news_list['list']]
get_ads()
print(ad_list)

我的文章

如果我們希望對我們自己的文章進(jìn)行分析和處理,首先需要進(jìn)行登錄。原本我打算嘗試通過編寫代碼實(shí)現(xiàn)免登錄,但是仔細(xì)研究后臺(tái) JavaScript 和登錄驗(yàn)證后發(fā)現(xiàn)實(shí)現(xiàn)起來涉及的內(nèi)容過多,對我們這樣以學(xué)習(xí)為主的學(xué)者來說并不適合。

確保我已經(jīng)登錄的標(biāo)識(shí)是通過 cookie 實(shí)現(xiàn)的。Cookie 在這里的作用是保持用戶登錄狀態(tài),使用戶在不同頁面之間保持登錄狀態(tài)。由于 HTTP 是無狀態(tài)的,需要一種方法來保持會(huì)話連接,而這種方法就是使用 Cookie。對于請求來說,Cookie 就是一串字符串,服務(wù)器會(huì)自動(dòng)解析它,無需我們手動(dòng)管理。因此,我只需在網(wǎng)頁登錄后使用工具復(fù)制粘貼 Cookie 即可。盡管我花費(fèi)了一整天,但仍未成功編寫代碼實(shí)現(xiàn)登錄并獲取 Cookie。因此,我們最好選擇最簡單的方法。

示例代碼如下:

import requests
def get_my_article(page_num):
    headers = {
        'authority''cloud.tencent.com',
        'accept''application/json, text/plain, */*',
        'accept-language''zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'content-type''application/json',
        'cookie''',# 這里需要復(fù)粘貼你自己的cookie。
        'origin''https://cloud.tencent.com',
        'referer''https://cloud.tencent.com/developer/creator/article',
        'sec-ch-ua''"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
        'sec-ch-ua-mobile''?0',
        'sec-ch-ua-platform''"Windows"',
        'sec-fetch-dest''empty',
        'sec-fetch-mode''cors',
        'sec-fetch-site''same-origin',
        'user-agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
    }
    page_size = 20
    json_data = {
        'hostStatus'0,
        'sortType''create',
        'page': page_num,
        'pagesize': page_size,
    }

    response = requests.post(
        'https://cloud.tencent.com/developer/api/creator/articleList',
        headers=headers,
        json=json_data,
    )
    news_list = response.json()
    for article in news_list['list']:
        # handle_tag(article)
        # 這里我就不解析了,簡單打印一下吧。
        my_article_list.append({
            "article_title": article['title'],
            "article_date": article['createTime'],
            "article_summary": article['summary']
        })
    article_total = news_list['total']
    if page_num*page_size > article_total:
        return 0
    else:
        return 1

在這個(gè)函數(shù)中,參數(shù)page_num代表著要獲取的文章列表頁數(shù)。請務(wù)必留意,請求頭中的headers需要包含用戶自行提供的Cookie信息,這樣才能確保程序正常運(yùn)行。您可以在這里獲取到Cookie信息,只需將其復(fù)制粘貼即可。詳見下圖:

image

總結(jié)

在過去的實(shí)踐中,我們常常通過爬取HTML網(wǎng)頁來解析和提取數(shù)據(jù),因此今天我們討論了如何通過調(diào)用接口來獲取所需數(shù)據(jù)。本文通過示例代碼展示了如何爬取社區(qū)首頁的文章和活動(dòng)數(shù)據(jù),以及如何爬取自己的文章列表。通過這些實(shí)踐,我們可以更好地理解和運(yùn)用接口爬取技術(shù)。


該文章在 2024/3/27 8:59:04 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved