私は次の男の子につける名前の候補リストを考えていて、このサイトを見ていますインド子育て. サイト上のそれぞれの名前には、このような URL で詳細ページがありますhttp://www.indiaparenting.com/babynames/meaning-of-Aadesh.shtml
。私は、最初の子に似た名前にしたいので、次のことを実行しようとしています。
- WGETで「meaning-of」を含むサイト内のすべてのページをハードドライブ上の1つのフォルダにコピーします。
wget -nc -c -nd -r -l1 -k http://www.indiaparenting.com/babynames/hindu-boy-names.php -A "meaning-of*" -I /babynames
dir > filenames.txt
すべてを 1 つのテキスト ファイルにまとめるなどの操作を行います。- 生成されたファイルを特定の正規表現で解析し、可能性のある名前を検索します。長男の名前は 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();
}
質問: ページを再帰的に WGET するとページごとに進むと思っていましたが、そうではありません。WGET でこれを処理する方法はありますか? ない場合、別のオプションはありますか?
その他の情報: 正規表現に基づいてリストを生成することも考えましたが、長すぎる上に無効な名前が多すぎるため、これらの赤ちゃんの名前サイトの 1 つから実際の名前を基にしたいと思います。また、サイトに連絡して、DB でクエリを実行して名前をファイルに保存できるかどうかを確認するつもりです。それでもうまくいかない場合は、他のサイトもチェックしてください。
答え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 がアクティブになります。