1. Что такое PHP?
PHP (иностранное название: PHP: препроцессор гипертекста, китайское название: «препроцессор гипертекста») — это общий язык сценариев с открытым исходным кодом. Грамматика вбирает в себя характеристики языка C, Java и Perl, что способствует обучению и широко используется, и в основном подходит для области веб-разработки. Уникальный синтаксис PHP представляет собой смесь C, Java, Perl и собственного синтаксиса PHP. Он может выполнять динамические веб-страницы быстрее, чем CGI или Perl. По сравнению с другими языками программирования динамическая страница, созданная PHP, предназначена для встраивания программы в документ HTML (приложение на стандартном общем языке разметки) для выполнения, а эффективность выполнения намного выше, чем у CGI, который полностью генерирует HTML-разметку. ; PHP также может выполнять скомпилированный код, а компиляция может обеспечивать шифрование и оптимизацию кода для выполнения, что ускоряет выполнение кода. —— Описание в энциклопедии Baidu.
2. Какая польза от рептилий?
Для чего нужны рептилии? Позвольте мне сначала рассказать о том, что такое краулер. Я думаю, что краулер — это программа для сбора информации о сети. Может быть, я неправильно понимаю, пожалуйста, поправьте меня. Поскольку сканер является программой сбора сетевой информации, он используется для сбора информации, и собранная информация находится в сети. Если все еще не ясно, для чего используются краулеры, я приведу несколько примеров приложений краулеров: поисковым системам нужны краулеры для сбора информации о сети, которую люди могут искать; данные больших данных, откуда берутся данные? То есть он может быть просканирован (собран) в сети краулерами.
3. Когда я слышу поисковые роботы, я обычно думаю о Python, но почему я использую PHP вместо Python?
- Python Честно говоря, я не знаю Python. (Я действительно не знаю Python. Интересно, можете ли вы пойти на Baidu, потому что я действительно не знаю Python.)
- Когда я пишу что-то на PHP, я всегда думаю, что пока вы создаете программу-алгоритм, вам не нужно учитывать слишком много типов данных.
- Синтаксис PHP подобен другим языкам программирования, и даже если вы не знаете PHP сначала, вы можете сразу же приступить к работе.
- Синтаксис PHP подобен другим языкам программирования, и даже если вы не знаете PHP сначала, вы можете сразу же приступить к работе. мышление неправильное. )
- Я на самом деле новичок в PHP, и я хочу улучшить свой уровень, написав что-нибудь. (Некоторые части приведенного ниже кода могут показаться вам нестандартными, пожалуйста, поправьте меня, спасибо.)
В-четвертых, первый шаг сканера PHP
Первый шаг сканера PHP, первый шаг... Первым шагом, конечно же, является создание операционной среды PHP Как PHP может работать без среды? Также как рыба не может покинуть воду. (Я недостаточно знаю, возможно, мой пример с рыбой недостаточно хорош, пожалуйста, простите меня.) Я использую WAMP в системе Windows и LNMP или LAMP в системе Linux.
WAMP: Windows + Apache + Mysql + PHP
ЛАМПА: Linux + Apache + Mysql + PHP
LNMP: Linux + Nginx + Mysql + PHP
Apache и Nginx — это программное обеспечение веб-сервера.
Apache или Nginx, Mysql и PHP Это базовая среда настройки PHP Web. В Интернете есть установочные пакеты для веб-среды PHP, эти установочные пакеты очень удобны в использовании и не требуют установки и настройки для каждой вещи. Но если вас беспокоят проблемы с безопасностью этих интегрированных установочных пакетов, вы можете загрузить их с официальных сайтов этих программ, а затем поискать в Интернете руководства по настройке. (Честно говоря, я действительно не делаю это в одиночку, мне это очень хлопотно.)
Пять, второй шаг сканера PHP
(Я чувствую, что говорю много ерунды, я должен немедленно придумать кусок кода!!!)
<?php
// 爬虫核心功能:获取网页源码
$html = file_get_contents("https://www.baidu.com/index.html");
// 通过 php 的 file_get_contents 函数获取百度首页源码,并传给 $html 变量
echo $html;
// 输出 $html
?>
Основные функции краулерной сети написаны. Почему вы говорите, что основные функции краулера написаны всего в нескольких строках кода? Думаю, кто-то это уже понял.На самом деле, поскольку краулер — это программа сбора данных, приведенные выше строки кода действительно могут получить данные, поэтому основная функция краулера написана. Некоторые люди могут сказать: «Ты слишком хорош! Какой в этом смысл?» Хотя я очень хорош, пожалуйста, не говорите этого, позвольте мне притвориться Х. (Опять две строчки ерунды, извините.)
На самом деле, то, для чего используется рептилия, в основном зависит от того, что вы хотите, чтобы она делала. Так же, как я несколько дней назад для прикола написал сайт-поисковик, конечно, сайт очень хороший, и результаты сортируются неравномерно, и многие из них не могут быть найдены. Мой сканер для поисковых систем должен написать сканер, подходящий для поисковых систем. Поэтому для удобства я также использую краулер поисковой системы в качестве цели для объяснения. Конечно, краулер моей поисковой системы все еще не идеален, и все недостатки вам предстоит создавать и улучшать.
6. Ограничения сканеров поисковых систем
Иногда краулер поисковой системы не может получить исходный код страницы со страницы веб-сайта, но имеет файл robot.txt.Сайт с этим файлом означает, что владелец сайта не хочет, чтобы краулер сканировал страницу исходный код. (Но если вы просто хотите получить его, вы можете подняться на него, даже если он у вас есть!)
Краулер моей поисковой системы на самом деле имеет много ограничений, вызванных недостатками, например, он не может получить исходный код страницы, потому что не может запускать сценарии JS. Или на сайте есть механизм защиты от сканирования, который не позволяет получить исходный код страницы. Веб-сайт с механизмом защиты от сканирования выглядит так: Zhihu, Zhihu — это веб-сайт с механизмом защиты от сканирования.
Семь, возьмите в качестве примера краулер поисковой системы, приготовьтесь написать то, что нужно краулеру.
- Основы написания PHP
- Регулярные выражения (вы также можете использовать Xpath, извините, я не буду)
- Использование базы данных (в этой статье используется база данных MySql)
- Работающая среда (если есть среда и база данных, которые могут запускать веб-сайты PHP, все в порядке)
8. Поисковая система получает исходный код страницы и получает информацию о заголовке страницы.
<?PHP
// 通过 file_get_contents 函数获取百度页面源码
$html = file_get_contents("https://www.baidu.com/index.html");
// 通过 preg_replace 函数使页面源码由多行变单行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 通过 preg_match 函数提取获取页面的标题信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOne,$titleArr);
// 由于 preg_match 函数的结果是数组的形式
$title = $titleArr[1];
// 通过 echo 函数输出标题信息
echo $title;
?>
Пример сообщения об ошибке:
Warning: file_get_contents("https://https://127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
https — это протокол шифрования SSL. Если при получении страницы возникает указанная выше ошибка, это означает, что в вашем PHP может отсутствовать модуль OpenSSL. Вы можете найти решение в Интернете.
Девять, характеристики сканеров поисковых систем
Хотя я не встречал поисковые роботы, такие как «Baidu» и «Google», я сам обобщил некоторые функции путем догадок и некоторых проблем, возникающих в процессе фактического сканирования. (Может быть что-то не так или чего-то не хватает, пожалуйста, поправьте меня, спасибо.)
- общность
Универсальность заключается в том, что я думаю, что краулеры поисковых систем изначально не предназначены для какого-либо веб-сайта, поэтому требуется просканировать как можно больше веб-сайтов, что является первым пунктом. Второй момент заключается в том, что информация, полученная с веб-страницы, такова.В начале некоторая информация не будет выдана из-за каких-то специальных небольших веб-сайтов.Например, в метатеге веб-страницы отсутствует информация описания (description) небольшой веб-сайт. ) или информацию о ключевом слове (ключевое слово), я напрямую отказываюсь от извлечения информации описания или информации о ключевом слове. Конечно, если на определенной странице нет этой информации, я все равно буду извлекать текстовое содержимое на странице как заполнение , чтобы обеспечить максимально возможное сканирование. Информационные элементы каждой веб-страницы должны быть одинаковыми. Это то, что я думаю, является общим для сканеров поисковых систем, конечно, я могу ошибаться. (Возможно, я не слишком хорошо говорю, я все еще учусь.)
- Неопределенность
Неопределенность заключается в том, что у меня недостаточно контроля над тем, какие веб-страницы извлекает мой поисковый робот, и я могу контролировать только те ситуации, которые я могу придумать. Это также связано с тем, что алгоритм, который я написал, именно такой. Мой алгоритм основан на страницах, полученных в результате сканирования. Все ссылки , а затем сканировать, чтобы получить эти ссылки, на самом деле потому, что поисковая система ищет не определенные вещи, а как можно больше, потому что только больше информации может найти наиболее подходящий ответ, который хочет пользователь. Поэтому я думаю, что сканер поисковой системы должен иметь неопределенность. (Я сам перечитал это снова, и я также немного чувствую, что не могу понять, что я сказал, пожалуйста, простите меня, пожалуйста, поправляйте меня, задавайте вопросы, спасибо!)
Видео ниже — это видео использования моего поискового веб-сайта, а искомая информация получена с помощью сканера PHP, написанного мной. (Я больше не поддерживаю этот веб-сайт, поэтому, пожалуйста, простите меня за любые недостатки.)
10. Возможные проблемы на данный момент
- Полученный исходный код искажен
<?PHP
// 乱码解决办法,把其他编码格式通过 mb_convert_encoding 函数统一转为 UTF-8 格式
$html = mb_convert_encoding($html,'UTF-8','UTF-8,GBK,GB2312,BIG5');
// 还有一种因为gzip所以出现乱码的,我会在以后讲
?>
2. Не могу получить информацию о названии
<?PHP
// 获取不到标题信息解决办法,首先判断是否能获取到页面源码
// 如果能获取到但还是不能获取到标题信息
// 我猜测的问题是:因为我教的是使用正则表达式获取的,源码没有变成一行,获取起来就会出现问题
$htmlOneLine=preg_replace("/\r|\n|\t/","",$html);
?>
3. Не могу получить исходный код страницы
<?PHP
// 像新浪微博你可能获取到的是“Sina Visitor System”
// 解决办法添加header信息
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n",
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 这样就能获取到新浪微博的页面了
?>
11. Обработка идей при получении веб-страницы
Давайте не будем думать о многих веб-страницах, потому что многие веб-страницы также являются циклом.
- Получить исходный код страницы
- Какая информация извлекается со страницы через исходный код
- Что делать с извлеченной информацией
- Не заносить в базу после обработки
12. Код по идее 11
<?php
// 一、获取源码
// 假设我们要获取淘宝首页
$html = file_get_content("https://www.taobao.com");
// 二、提取标题和文本
// 三、提取信息处理
// 处理页面源码,多行变单行
$htmlOneLine = preg_replace("/\r|\n|\t/","",$html);
// 获取标题信息
preg_match("/<title>(.*)<\/title>/iU",$htmlOneLine,$titleArr);
// 保留标题信息
$titleOK = $titleArr[1];
// 获取页面中的文本信息
// 处理前面不需要的head标签
$htmlText = preg_replace("/<html>(.*)<\/head>/","",$htmlOneLine);
// 处理style和script标签及内容
$htmlText = preg_replace("/<style(.*)>(.*)</style>|<script(.*)>(.*)</script>/iU","",$htmlText);
// 处理多余标签
$htmlText = preg_replace("/<(\/)?(.+)>/","",$htmlText);
// 四、保存到数据库
// 略
?>
Тринадцать, PHP сохранить идеи изображения страницы
- Получить исходный код страницы
- Получить ссылку на изображение страницы
- сохранить изображение с помощью функции
Четырнадцать, сохраните пример кода изображения
<?php
// 使用file_get_contents()函数获取图片
$img = file_get_contents("http://127.0.0.1/photo.jpg");
// 使用file_put_contents()函数保存图片
file_put_contents("photo.jpg",$img);
?>
Продолжение следует. . .