摘要:隨后水友就提到了關鍵信息當水友實際用請求時,返回的內容卻是代碼。所以在水友找到我的時候,我首先看下網站長的什么樣子,水友需要的信息是各大區的名稱。
閱讀文本大概需要 5 分鐘。
JS 都是大豬蹄子昨天讀者群有位水友發了這么一條消息,說這樣的網站頁面信息要如何提取 td 的內容,聊天截圖顯現的頁面是在瀏覽器上看到的代碼。
那時候我剛下班,日常水下群。然后看到這條消息,心里就想這個簡單啊,寫個 xpath、寫個 bs4、寫個正則匹配下,輕輕松松就可以獲取到,然而事情并沒有想象中的那么簡單。
隨后水友就提到了關鍵信息:當水友實際用 Python 請求時,返回的內容卻是 JS 代碼。
我明明在瀏覽器上看到的是一個個很有層次的貌美如花的小姐姐 HTML 代碼,怎么用代碼請求就成了晦澀難懂的大豬蹄子 JS 代碼啊?我要小姐姐!
一時間水友不知所措,怎么提取也提取不到自己想要的內容。隨后群里有些水友提出要不用 bs4 試試,或者用正則匹配,各有說辭,聊的不亦悅乎。
身為爬蟲老司機的我,爬過的網站雖然沒有成千,但至少也快上百了,大大小小的坑基本都遇到過。當我接到一個新的爬蟲任務時,首選第一步就是分析下網頁數據請求的流程。很多時候會有很簡單的辦法就可以獲取到網頁的數據。
所以在水友找到我的時候,我首先看下網站長的什么樣子,水友需要的信息是各大區的名稱。
網站地址:
https://xyq.cbg.163.com/
第一眼看到這個網站,心里的印象是這個網站結構不復雜,信息不難提取。但因為有了之前群里消息的鋪墊,我就懂了這個網頁是 JS 代碼渲染出來的。
JS 渲染網頁JS 渲染網頁是爬蟲里很常見的一種網頁類型,這類的網站有個特點,即如果你不是帶有瀏覽器環境信息進行請求,服務器是不會把正確的數據返回給你。普通的請求只能獲取到大豬蹄子 JS 代碼,晦澀又難懂。
針對這種情況,你想要看到小姐姐真正的盛世美顏,有兩種辦法,1 利用 selenium 自動化框架,2 解析具體的 JS 代碼。
selenium 就像一個彪形大漢,直接模擬一個真實的瀏覽器環境,簡單粗暴的就可以獲取到真實的數據,跟真正的瀏覽器發生請求是一樣的。但這樣的粗暴方式帶來的后果就是效率非常低下。
所以我們可以嘗試第二種方法:通過解析具體的 JS 代碼,出淤泥而不染的輕輕的看到小姐姐的容顏。
隨后我熟練的打開瀏覽器控制臺,查看了下網頁請求的過程,把具體的 JS 請求部分找出來。大致看了下所有的 JS 文件,找到了一個名為 server_list_data.js 文件,這個文件中有個 list_data 字段,非常有可能是存儲了一些數據。所以我點開這個文件進行具體的查看。
果不其然在這個文件中看到了很多 unicode 編碼的內容,隨后我再找了一個編碼轉換網站進行驗證。
這些 unicode 編碼正是網頁上顯示的內容,接下來我們要做的就是用程序請求下這個 JS 鏈接,解析下返回的內容,把 unicode 碼轉換成中文即可。
程序代碼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()
輸出結果:
多么美妙的小姐姐啊,呸,多么工整的數據啊。
本文首發于公眾號「癡?!?,公眾號后臺回復「1024」即可獲取最新編程資源。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44833.html
摘要:前言公司最近有一個頁面的功能,比較簡單的一個調查表功能,嵌套在我們微信公眾號里面。同時用到了微信的登錄和分享接口。參考鏈接使用微信接口前端部分我們用微信接口主要是做的登錄和分享功能,首先是上微信公眾平臺上邊看看,把權限搞好之后后端配置。 showImg(https://segmentfault.com/img/bVbrOkH); 前言: 公司最近有一個H5頁面的功能,比較簡單的一個調查...
摘要:前言公司最近有一個頁面的功能,比較簡單的一個調查表功能,嵌套在我們微信公眾號里面。同時用到了微信的登錄和分享接口。參考鏈接使用微信接口前端部分我們用微信接口主要是做的登錄和分享功能,首先是上微信公眾平臺上邊看看,把權限搞好之后后端配置。 showImg(https://segmentfault.com/img/bVbrOkH); 前言: 公司最近有一個H5頁面的功能,比較簡單的一個調查...
摘要:前言公司最近有一個頁面的功能,比較簡單的一個調查表功能,嵌套在我們微信公眾號里面。同時用到了微信的登錄和分享接口。參考鏈接使用微信接口前端部分我們用微信接口主要是做的登錄和分享功能,首先是上微信公眾平臺上邊看看,把權限搞好之后后端配置。 showImg(https://segmentfault.com/img/bVbrOkH); 前言: 公司最近有一個H5頁面的功能,比較簡單的一個調查...
showImg(https://segmentfault.com/img/remote/1460000018808058?w=900&h=500); 簡介 SEO、sitemap、搜索引擎優化、簡單教程 在曖昧期和暗戀期時心里總是懸掛著: ta 為什么還不和我表白? ta 是不是對我沒感覺? ta 是不是只是把我當備胎? ta 是不是對誰都這樣? 解決問題最簡單的方式就是直接 問問對方...
閱讀 2674·2021-11-25 09:43
閱讀 2586·2021-11-22 09:34
閱讀 2848·2021-11-12 10:34
閱讀 1439·2021-10-20 13:46
閱讀 2306·2019-08-30 13:21
閱讀 934·2019-08-30 11:21
閱讀 486·2019-08-30 11:20
閱讀 2190·2019-08-29 17:20