日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

前言

自從ChatGPT出現后,對于文本處理的能力直接上升了一個維度。在這之前,我們爬取到網絡上的文本內容之后,都需要寫一個文本清理的程序,對文本進行清洗,而現在,有了chatGPT的加持,我們只需要幾秒,就可以很方便對所有類型,所有格式的文本內容,完成清洗,去除那些html標簽等。
對于清洗后的文章,我們仍然可以做很多事情,比如,提取核心觀點,文章改寫等操作,使用chatGPT都可以很輕松的解決。

早在2019年,我就寫過一篇文章,介紹爬蟲爬取公眾號文章的方法,現在看來依然適用,只不過,當時我們對于爬到的文章,后續基本沒有什么處理了,但是現在不同了,我們可以做很多事情,不過前提是不要違反法律法規。

獲取文章的URL

爬蟲爬取網絡資源,最重要的就是可以找到目標網站的url地址,然后尋找規律,遍歷地址逐個或多線程進行爬取。一般獲取地址的方式,一是通過網頁分頁,推斷出url地址的規律嗎,比如通過參數pageNum = num等,只需要將num進行累加即可。另外一種是隱藏在HTML中的,我們需要解析出當前網頁的超鏈接,如< a href="url">,取出url作為后續爬取的地址。

遺憾的是,微信公眾號對于這兩種方式都很難使用,我們可以在網頁中打開一個微信公眾號地址,可以看下它的url格式,

https://mp.weixin.qq.com/s?__biz=MzIxMTgyODczNg==&mid=2247483660&idx=1&sn=2c14b9b416e2d8eeed0cbbc6f44444e9&chksm=974e2863a039a1752605e6e76610eb39e5855c473edab16ab2c7c8aa2f624b4d892d26130110&token=20884314&lang=zh_CN#rd

除了前面的域名,后面的參數完全就是沒有規律可循,而且,在一篇文章中,也沒有辦法鏈接到下一篇文章,我們無法從一篇文章開始,爬取到這個公眾號下的所有文章。

但好在,我們依然又辦法批量獲取到某個公眾號下的所有文章地址,我們只需要將其保存下來,后續再遍歷爬取就變得輕松很多。

1.首先,你要有一個公眾號,如果沒有的話,可以注冊一個,這個是前提條件。注冊公眾號的步驟比較簡單,可以自行操作。
2.注冊好之后,登錄微信公眾平臺,點擊左側草稿箱,新建圖文

3.進入新建圖文頁面,點擊頂端的超鏈接,出現一個彈窗,選擇公眾號文章,輸入你要爬取的公眾號的名稱,如下所示:

4.選中之后,你就可以看到這個公眾號下的所有文章的列表了,這個時候,打開F12,查看網頁里面的網絡請求。

當你點擊下一頁的時候,可以看到請求的url,還有攜帶的業務參數以及請求頭參數。

上面就是一些業務參數,這些參數很容易理解,比較重要的是begin指的是從第幾個開始查詢,count指的是一次列表查詢多少個,fakeid是公眾號的唯一標識,每個公眾號不一樣,如果爬取其他公眾號的,只需要更改這個參數就可以了。其中random可以省略。還可以看到相應結果:

編寫代碼

有了上述這些信息,我們就可以編寫代碼了,我使用的是Python/ target=_blank class=infotextkey>Python3.8,首先,定義url,header和所需要的參數

# 目標url
url = "https://mp.weixin.qq.com/cgi-bin/Appmsg"
# 請求頭參數
headers = {
  "Cookie": "ua_id=YF6RyP41YQa2QyQHAAAAAGXPy_he8M8KkNCUbRx0cVU=; pgv_pvi=2045358080; pgv_si=s4132856832; uuid=48da56b488e5c697909a13dfac91a819; bizuin=3231163757; ticket=5bd41c51e53cfce785e5c188f94240aac8fad8e3; ticket_id=gh_d5e73af61440; cert=bVSKoAHHVIldcRZp10_fd7p2aTEXrTi6; noticeLoginFlag=1; remember_acct=mf1832192%40smAIl.nju.edu.cn; data_bizuin=3231163757; data_ticket=XKgzAcTceBFDNN6cFXa4TZAVMlMlxhorD7A0r3vzCDkS++pgSpr55NFkQIN3N+/v; slave_sid=bU0yeTNOS2VxcEg5RktUQlZhd2xheVc5bjhoQTVhOHdhMnN2SlVIZGRtU3hvVXJpTWdWakVqcHowd3RuVF9HY19Udm1PbVpQMGVfcnhHVGJQQTVzckpQY042QlZZbnJzel9oam5SdjRFR0tGc0c1eExKQU9ybjgxVnZVZVBtSmVnc29ZcUJWVmNWWEFEaGtk; slave_user=gh_d5e73af61440; xid=93074c5a87a2e98ddb9e527aa204d0c7; openid2ticket_obaWXwJGb9VV9FiHPMcNq7OZzlzY=lw6SBHGUDQf1lFHqOeShfg39SU7awJMxhDVb4AbVXJM=; mm_lang=zh_CN",
  "User-Agent": "Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
}

# 業務參數
data = {
    "token": "1378111188",
    "lang": "zh_CN",
    "f": "json",
    "ajax": "1",
    "action": "list_ex",
    "begin": "0",
    "count": "5",
    "query": "",
    "fakeid": "MzU5MDUzMTk5Nw==",
    "type": "9",
}

cookie和token需要根據自己請求URL中的進行更改,然后發送請求獲取響應,并對響應結果進行解析。

content_list = []
for i in range(20):
    data["begin"] = i*5
    time.sleep(5)
    # 使用get方法進行提交
    content_json = requests.get(url, headers=headers, params=data).json()
    # 返回了一個json,里面是每一頁的數據
    for item in content_json["app_msg_list"]:    
    # 提取每頁文章的標題及對應的url
        items = []
        items.append(item["title"])
        items.append(item["link"])
        t = time.localtime(item["create_time"])
        items.append(time.strftime("%Y-%m-%d %H:%M:%S", t))
        content_list.append(items)

第一個for循環是爬取的頁數,這里建議一次爬取20頁,每一頁5條數據,就是100篇文章了,首先需要看好公眾號的歷史文章列表一共有多少頁,這個數只能小于頁數。更改data[“begin”],表示從第幾條開始,每次5條,注意爬取不能夠太多和太頻繁,所以需要每次爬取等待幾秒鐘,不然會被封ip封cookie,嚴重還會封公眾號。

最后,我們只需要把標題和url保存起來就可以了,保存起來后,就可以逐個爬取了。

name = ['title', 'link', 'create_time']
test = pd.DataFrame(columns=name, data=content_list)
test.to_csv("url.csv", mode='a', encoding='utf-8')

為了獲取所有的歷史文章,需要得到文章總數,從app_msg_cnt中獲取,然后計算一共有多少頁,就可以一次性爬取所有文章了。

content_json = requests.get(url, headers=headers, params=data).json()
count = int(content_json["app_msg_cnt"])
print(count)
page = int(math.ceil(count / 5))
print(page)

為了抓取的不夠頻繁,我們需要不斷sleep一段時間,我們可以爬取10次之后,就讓程序sleep幾秒

if (i > 0) and (i % 10 == 0):
        name = ['title', 'link', 'create_time']
        test = pd.DataFrame(columns=name, data=content_list)
        test.to_csv("url.csv", mode='a', encoding='utf-8')
        print("第" + str(i) + "次保存成功")
        content_list = []
        time.sleep(random.randint(60,90))
    else:
        time.sleep(random.randint(15,25))


最后,看下保存的結果吧

完整的代碼,放在Github上了,可以直接下載使用
https://github.com/cxyxl66/WeChatCrawler

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定