如何使用 WGET 导航基于 PHP 的分页?

如何使用 WGET 导航基于 PHP 的分页?

我正在尝试列出我们下一个男婴的可能名字,并一直在浏览该网站印度育儿。网站上的每个名字都有一个详细信息页面,网址如下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();      
}

问题:我原本以为使用 WGET 递归方式可以逐页访问页面,但事实并非如此。有没有办法使用 WGET 来处理这个问题?如果没有,还有其他选择吗?


其他信息:我考虑过根据正则表达式生成一个列表,但无论如何它都会太长,而且无效名称太多,这就是为什么我想根据其中一个婴儿姓名网站的实际名称来生成列表。我还将联系该网站,看看他们是否能够在其数据库上运行查询并将名称放入文件中,如果其他方法都失败了,还有其他网站可以查看。

答案1

该网站的设计特别奇怪。不过请注意,PHP 在这里没有什么不同。

他们似乎使用以下方法加载页面:

  1. 单击链接会执行一些 JS。
  2. 这个 JS 使用页码填充隐藏的表单。
  3. 然后脚本提交表单,向服务器发出 POST 请求。
  4. 服务器直接响应相关页面。

这里有几个选项。最简单的方法是简单地编写一个循环内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。

相关内容