亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

當(dāng) JS 大豬蹄子遇到 HTML 小姐姐

LeanCloud / 3509人閱讀

摘要:隨后水友就提到了關(guān)鍵信息當(dāng)水友實際用請求時,返回的內(nèi)容卻是代碼。所以在水友找到我的時候,我首先看下網(wǎng)站長的什么樣子,水友需要的信息是各大區(qū)的名稱。

閱讀文本大概需要 5 分鐘。

JS 都是大豬蹄子

昨天讀者群有位水友發(fā)了這么一條消息,說這樣的網(wǎng)站頁面信息要如何提取 td 的內(nèi)容,聊天截圖顯現(xiàn)的頁面是在瀏覽器上看到的代碼。

那時候我剛下班,日常水下群。然后看到這條消息,心里就想這個簡單啊,寫個 xpath、寫個 bs4、寫個正則匹配下,輕輕松松就可以獲取到,然而事情并沒有想象中的那么簡單。

隨后水友就提到了關(guān)鍵信息:當(dāng)水友實際用 Python 請求時,返回的內(nèi)容卻是 JS 代碼。

我明明在瀏覽器上看到的是一個個很有層次的貌美如花的小姐姐 HTML 代碼,怎么用代碼請求就成了晦澀難懂的大豬蹄子 JS 代碼?。课乙〗憬?!

一時間水友不知所措,怎么提取也提取不到自己想要的內(nèi)容。隨后群里有些水友提出要不用 bs4 試試,或者用正則匹配,各有說辭,聊的不亦悅乎。

身為爬蟲老司機(jī)的我,爬過的網(wǎng)站雖然沒有成千,但至少也快上百了,大大小小的坑基本都遇到過。當(dāng)我接到一個新的爬蟲任務(wù)時,首選第一步就是分析下網(wǎng)頁數(shù)據(jù)請求的流程。很多時候會有很簡單的辦法就可以獲取到網(wǎng)頁的數(shù)據(jù)。

所以在水友找到我的時候,我首先看下網(wǎng)站長的什么樣子,水友需要的信息是各大區(qū)的名稱。

網(wǎng)站地址:

https://xyq.cbg.163.com/

第一眼看到這個網(wǎng)站,心里的印象是這個網(wǎng)站結(jié)構(gòu)不復(fù)雜,信息不難提取。但因為有了之前群里消息的鋪墊,我就懂了這個網(wǎng)頁是 JS 代碼渲染出來的。

JS 渲染網(wǎng)頁

JS 渲染網(wǎng)頁是爬蟲里很常見的一種網(wǎng)頁類型,這類的網(wǎng)站有個特點(diǎn),即如果你不是帶有瀏覽器環(huán)境信息進(jìn)行請求,服務(wù)器是不會把正確的數(shù)據(jù)返回給你。普通的請求只能獲取到大豬蹄子 JS 代碼,晦澀又難懂。

針對這種情況,你想要看到小姐姐真正的盛世美顏,有兩種辦法,1 利用 selenium 自動化框架,2 解析具體的 JS 代碼。

selenium 就像一個彪形大漢,直接模擬一個真實的瀏覽器環(huán)境,簡單粗暴的就可以獲取到真實的數(shù)據(jù),跟真正的瀏覽器發(fā)生請求是一樣的。但這樣的粗暴方式帶來的后果就是效率非常低下。

所以我們可以嘗試第二種方法:通過解析具體的 JS 代碼,出淤泥而不染的輕輕的看到小姐姐的容顏。

隨后我熟練的打開瀏覽器控制臺,查看了下網(wǎng)頁請求的過程,把具體的 JS 請求部分找出來。大致看了下所有的 JS 文件,找到了一個名為 server_list_data.js 文件,這個文件中有個 list_data 字段,非常有可能是存儲了一些數(shù)據(jù)。所以我點(diǎn)開這個文件進(jìn)行具體的查看。

果不其然在這個文件中看到了很多 unicode 編碼的內(nèi)容,隨后我再找了一個編碼轉(zhuǎn)換網(wǎng)站進(jìn)行驗證。

這些 unicode 編碼正是網(wǎng)頁上顯示的內(nèi)容,接下來我們要做的就是用程序請求下這個 JS 鏈接,解析下返回的內(nèi)容,把 unicode 碼轉(zhuǎn)換成中文即可。

程序代碼
import requests
import re

def parse_js():
    url = "https://cbg-xyq.res.netease.com/js/server_list_data.js"
    headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
    html = requests.get(url, headers=headers)
    patten = re.compile(r"(.*)var server_data =(.*)", re.S)
    data = re.findall(patten, html.text)
    server_data = eval(data[0][1][:-1])
    for i in server_data:
        for j in server_data[i]:
            print(j)

if __name__ == "__main__":
    parse_js() 

輸出結(jié)果:

多么美妙的小姐姐啊,呸,多么工整的數(shù)據(jù)啊。

本文首發(fā)于公眾號「癡?!?,公眾號后臺回復(fù)「1024」即可獲取最新編程資源。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44833.html

相關(guān)文章

  • 使用vue完成微信公眾號網(wǎng)頁

    摘要:前言公司最近有一個頁面的功能,比較簡單的一個調(diào)查表功能,嵌套在我們微信公眾號里面。同時用到了微信的登錄和分享接口。參考鏈接使用微信接口前端部分我們用微信接口主要是做的登錄和分享功能,首先是上微信公眾平臺上邊看看,把權(quán)限搞好之后后端配置。 showImg(https://segmentfault.com/img/bVbrOkH); 前言: 公司最近有一個H5頁面的功能,比較簡單的一個調(diào)查...

    phoenixsky 評論0 收藏0
  • 使用vue完成微信公眾號網(wǎng)頁

    摘要:前言公司最近有一個頁面的功能,比較簡單的一個調(diào)查表功能,嵌套在我們微信公眾號里面。同時用到了微信的登錄和分享接口。參考鏈接使用微信接口前端部分我們用微信接口主要是做的登錄和分享功能,首先是上微信公眾平臺上邊看看,把權(quán)限搞好之后后端配置。 showImg(https://segmentfault.com/img/bVbrOkH); 前言: 公司最近有一個H5頁面的功能,比較簡單的一個調(diào)查...

    notebin 評論0 收藏0
  • 使用vue完成微信公眾號網(wǎng)頁

    摘要:前言公司最近有一個頁面的功能,比較簡單的一個調(diào)查表功能,嵌套在我們微信公眾號里面。同時用到了微信的登錄和分享接口。參考鏈接使用微信接口前端部分我們用微信接口主要是做的登錄和分享功能,首先是上微信公眾平臺上邊看看,把權(quán)限搞好之后后端配置。 showImg(https://segmentfault.com/img/bVbrOkH); 前言: 公司最近有一個H5頁面的功能,比較簡單的一個調(diào)查...

    yck 評論0 收藏0
  • 每日 30 秒 ? 投懷送抱

    showImg(https://segmentfault.com/img/remote/1460000018808058?w=900&h=500); 簡介 SEO、sitemap、搜索引擎優(yōu)化、簡單教程 在曖昧期和暗戀期時心里總是懸掛著: ta 為什么還不和我表白? ta 是不是對我沒感覺? ta 是不是只是把我當(dāng)備胎? ta 是不是對誰都這樣? 解決問題最簡單的方式就是直接 問問對方...

    kevin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<