python爬蟲-解決網頁中取不到的資訊-”真假網頁“
首先介紹一下我所理解的“真假網頁”,“真網頁”就是我們可以直接通過網址(URL),獲取這個“真網頁”上的任何內容。“假網頁”就是我們通過URL爬取網頁資訊時得到的結果為空,這一點相信大家在寫爬蟲程式時會經常遇到。比如我們想獲取一個網頁的資訊,利用requests的get方法對URL進行請求,再用BeautifulSoup進行解析後我們發現得到的結果為空!這樣我們就可能使用了一個“假網頁”,
比如我們想獲取電子學報的目錄的所有資訊,如下圖所示:
通常我們的寫法是這樣的:
import requests from bs4 import BeautifulSoup res = requests.get("http://navi.cnki.net/KNavi/JournalDetail?pcode=CJFD&pykm=DZXU") soup = BeautifulSoup(res.text,'html.parser') print(soup)
但是我們列印soup後發現其中並沒有任何的目錄資訊!也就是說,這個網址是一個“假網址”,我們想要的內容雖然顯示在了這個網址上,但我們卻爬取不到關於他的任何資訊!那麼只有一種可能,就是它的資訊在別的網址上,那麼我們會考率2種情況:1.非同步載入 2.非同步傳輸 (這兩個有點像,大家別弄混了!)
1.非同步載入是動態爬取得典型情況,也就是 不是 直接呈現給我們的,而是通過載入後才呈現給我們的,這部分通常在JavaScript中,我們依次檢查JavaScript,就會找到真正的網址!如下圖中藍色框框可見
2.非同步傳輸:通常資料傳輸有兩種模式,同步傳輸和非同步傳輸。同步傳輸是將一個數據塊直接傳送,這樣呈現給我們的就是通常的靜態網頁,那麼和為非同步傳輸?非同步傳輸是將資料分為一塊一塊的,不直接呈現一個完整的資料,那麼這部分資料在XHR下,如下如所示:
我們依次檢查XHR中每一項,如下如所示:
我們可以看到有4個XHR,依次檢查,我們點選每一項,在右側相應中檢視自己想要的資訊,我們可以在第3個XHR中發現自己想要的資訊,如下圖所示:
那麼此時我們就發現了自己想要的資訊,那麼接下來我們點選訊息頭,在訊息頭中我們可以看到請求網址,那麼這個網址就是我們苦苦尋找的”真網址“,接著通過以下程式碼就可以獲取自己想要的資訊了!
那麼“真假網址”的問題就解決了,歡迎大家一起討論!from bs4 import BeautifulSoup import requests url='http://navi.cnki.net/knavi/JournalDetail/GetArticleList?year=2018&issue=04&pykm=DZXU&pageIdx=0&pcode=CJFD' res = requests.get(url) soup = BeautifulSoup(res.text,'html.parser') print(soup)