我正在嘗試為我們的下一個男嬰列出可能的名字,並且一直在瀏覽網站印度育兒。網站上的每個名稱都有一個詳細資訊頁面,其 URL 如下所示http://www.indiaparenting.com/babynames/meaning-of-Aadesh.shtml
。我希望這個名字與我們的長子相似,並且正在嘗試執行以下操作:
- WGET 網站中包含「meaning-of」的所有頁面到我硬碟上的單一資料夾,其中包含類似內容
wget -nc -c -nd -r -l1 -k http://www.indiaparenting.com/babynames/hindu-boy-names.php -A "meaning-of*" -I /babynames
- 做一些事情,例如
dir > filenames.txt
將所有內容放入一個文字檔案中。 - 解析產生的檔案中的特定正規表示式以尋找可能的名稱。第一個兒子的名字是 Ranveer,我們正在尋找以 N 或 R 開頭的名字,因此正規表示式可能類似於:
[NR][aeiou][^aeiou][^aeiou][aeiou]{2}[^aeiou]
。 - 與女士一起手動查看最終名單並選擇一個名字!
我遇到的問題是 wget 。該頁面是用 PHP 創建的,底部有一個頁面導航器,它不會像平常一樣連結到另一個頁面的 URL:
我查看了一下,發現JS pagingFunction:
function pagingFunction(labelName){
vpage = document.getElementById("pageNum");
pageNm = labelName;
vpage.value = pageNm;
document.getElementById("frmPaging").submit();
}
問題:我以為遞歸 WGETting 頁面會一頁一頁地移動,但事實並非如此。有沒有辦法用 WGET 來處理這個問題?如果沒有,還有其他選擇嗎?
其他資訊:我考慮過基於正則表達式生成一個列表,但它太長並且有太多無效名稱,這就是為什麼我想將其基於這些嬰兒名字網站之一的實際名稱。我還將聯繫該網站,看看他們是否能夠在其資料庫上運行查詢並將名稱放入文件中,如果其他方法都失敗,還有其他網站可供檢查。
答案1
這個網站的設計特別奇怪。不過請注意,PHP 在這裡沒有什麼差別。
看起來他們使用以下方法加載頁面:
- 點擊連結會執行一些 JS。
- 該 JS 使用頁碼填入隱藏表單。
- 然後該腳本提交表單,該表單向伺服器發出 POST 請求。
- 伺服器直接回應相關頁面。
您在這裡有幾個選擇。最簡單的方法是簡單地編寫一個循環wget
請求--post-data
腳本來檢索從 1 到 n 的所有頁面。請參閱文件和瀏覽器的網路監視器以了解實際請求是什麼。例如,Firefox 的網路監視器顯示請求內文如下:
Content-Type: application/x-www-form-urlencoded
Content-Length: 145
pagingQuery=select+*+from+tblbabynames+where+++religion%3D%27hindu%27+and+gender%3D%27M%27+limit+0%2C30&totalRows=3097&pageNum=2&searchResultNo=0
pageNum=2
您也許可以在循環中替換。
一種更複雜的方法是使用像 Selenium 這樣的瀏覽器自動化工具包來逐字導航和點選鏈接,就像人類一樣激活 JS。