Я пытаюсь составить список возможных имен для нашего будущего мальчика и просматриваю сайтИндияВоспитание детей. Каждое имя на сайте имеет подробную страницу по 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
помещения всей информации в один текстовый файл. - Проанализируйте сгенерированный файл на предмет определенного регулярного выражения, чтобы найти возможные имена. Имя первого сына — Ранвир, и мы ищем имена, которые начинаются с 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 тут не играет никакой роли.
Похоже, они загружают страницы следующим методом:
- При нажатии на ссылку выполняется некоторый 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 так же, как это сделал бы человек.