«, «

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

License

Durendal/webBot

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

A web scraper written in PHP

webBot.php aims to simplify the use of cURL with php. At the moment it only handles GET and POST HTTP requests but I may add more to it as time and interest permits. It should work with HTTP and SOCKS proxies, the default behaviour is to use HTTP, to enable SOCKS proxies you must either declare it as the second parameter when instantiating the bot as in the first example below, or you must set it as the second parameter using the setProxy() method.

BTC: 3QjZrbqe8EGV9E6mTr2J5rkuqHVTGdXRH2 

An example of using it with tor:

require_once 'src/HTTPBot.php'; use Durendal\webBot as webBot; $bot = new webBot\HTTPBot("127.0.0.1:9050", "SOCKS"); $page = $bot->requestGET("http://zqktlwi4fecvo6ri.onion/wiki/index.php/Main_Page"); file_put_contents("index.html", $page); // index.html contains the html of the page 

if you then ran setProxy() with no parameters it would clear the proxy settings and the same request would fail:

$bot->setProxy(); $page = $bot->requestGET("http://zqktlwi4fecvo6ri.onion/wiki/index.php/Main_Page"); file_put_contents("index.html", $page); // index.html is an empty file 

Headers can be completely customized, although the defaults are enough to make basic requests. These values can also be overridden, added to, or deleted at any time.

if($bot->checkHeader("Keep-alive")) $bot->delHeader("Keep-alive"); $bot->addHeader("Keep-alive: 300"); if($bot->checkHeader("User-Agent")) $bot->delHeader("User-Agent"); $bot->addHeader("User-Agent: " . $bot->randomAgent()); 

POST parameters should be sent as an array through generatePOSTData() which will ensure they are urlencoded and properly formatted:

$pdata = array("username" => "Durendal", "password" => "abc&123", "submit" => "true"); $result = $bot->requestPOST("http://www.example.com/login.php", $bot->generatePOSTData($pdata)); if(stristr($result, "Login Successful")) print "Successfully logged in\n"; else print "Failed to log in\n"; 

This class also comes packaged with a number of parsing routines written by Mike Schrenk for his book Webbots, Spiders and Screenscrapers that I have found extremely useful in the past.

require_once 'src/HTTPBot.php'; use Durendal\webBot as webBot; $bot = new webBot\HTTPBot(); $subreddit = ($argc > 1) ? $argv[1] : 'talesfromtechsupport'; $page = $bot->requestGET("http://www.reddit.com/r/$subreddit/.rss"); $posts = $bot->parseArray($page, "", ""); $titles = array(); $links = array(); for($i = 0; $i < count($posts); $i++) < $titles[$i] = $bot->returnBetween($posts[$i], "", 1); $links[$i] = $bot->returnBetween($posts[$i], "", "", 1); print "Title #$i: ".$titles[$i]."\n"; print "Link #$i: ".$links[$i]."\n"; > 

This script takes an optional parameter of a subreddit name the default is ‘talesfromtechsupport’ It will scrape the RSS feed and post the front page of posts. This should illustrate the basic principles of using the bot. All parsing methods were adapted from original code written by Mike Schrenk in his book ‘Webbots spiders and Screenscrapers’

This class is able to leverage the curl_multi_* functions to make multiple requests at once in batch mode. You can use a proxy with this function the same as you would with any other request, however at this time there is no way to specify a different proxy for each request. This may change in the future if I get the time. Send an array of arrays as the sole parameter, each array should have at least one element: the URL. If the request is a POST request place a second value inside the array that is an array of POST parameters. You can mix and match POST and GET requests, it will determine which is which at execution time.

require_once 'src/HTTPBot.php'; use Durendal\webBot as webBot; $bot = new webBot\HTTPBot("127.0.0.1:9050", "SOCKS"); $creds = array("username" => "Durendal", "password" => "abc&123", "submit" => "true"); $sites = array(array("http://www.google.com"), array("http://www.bing.com"), array("http://www.cnn.com"), array("http://zqktlwi4fecvo6ri.onion"), array("http://www.example.com/login.php", $creds)); $results = $bot->curlMultiRequest($sites); foreach($results as $key => $page) < $key = str_replace(array("http://", "https://"), "", $key); print "Len: " . strlen($page) . "\n"; file_put_contents("$key.html", $page); >

You can optionally build a queue of URLs to scrape that acts as a FILO (First in last out) queue. This can work for individual or curl_multi_ requests, if its an individial request it will pop off the top URL and process it. If you run curl_multi it will process the entirety of the queue. In the future I may implement the option of selecting the number of urls to process. If there are items on the queue and you run requestGET(), requestPOST(), or requestHTTP() with an explicit url the queue will remain unaffected and the request will process normally.

// Disable Proxy $bot->setProxy(); $bot->pushURL("http://www.reddit.com/r/circlejerk/.rss"); $bot->pushURL("http://www.reddit.com/r/bitcoin/.rss"); $bot->pushURL("http://www.reddit.com/r/jobs4bitcoins/.rss"); // Pop the top URL from the stack and execute a request $page = $bot->requestGET(); $posts = $bot->parseArray($page, "", ""); $titles = array(); $links = array(); for($i = 0; $i < count($posts); $i++) < $ii = $i+1; $titles[$i] = $bot->returnBetween($posts[$i], "", 1); $links[$i] = $bot->returnBetween($posts[$i], "", "", 1); print "Title #$ii: ".$titles[$i]."\n"; print "Link #$ii: ".$links[$i]."\n"; > // Check the stack size print "URL Stack Size: " . $bot->urlCount() . "\n"; // Empty out the $bot->urls stack $results = $bot->curlMultiRequest(); foreach($results as $key => $page) < // Make $key a little bit nicer for a filename $key = substr(str_replace(array("http://", "https://", ".rss", "www.reddit.com/r/"), "", $key), 0, -1); print $key . " Len: " . strlen($page) . "\n"; file_put_contents("$key.html", $page); >
Viviparous Yani John Kozan 

For providing suggestions to help make webBot better 🙂

Источник

Как сделать поисковый робот?

Нужно сделать скрипт, который будет просматривать страницы в одном клике от главной.

Казалось бы, это несложно — взять код главной и найти в нем все ссылки, а потом открыть страницы по этим ссылкам. Но когда я посмотрел реальные сайты, то мой энтузиазм сильно поубавился, ибо там такое разнообразие исполнения меню, что с ума сойти можно!

Некоторые ссылки идут от корня, другие имеют полный адрес, а третьи через стили и списки запутаны так, что и вручную не разберешься, где вообще здесь ссылки, не говоря уже про их анкоры!

Но ведь Яндекс же это как-то делает!

Может быть, есть какой-то прием, или специальная функция, или еще что-то отработанное, что позволяет найти на странице все ссылки и их анкоры?

Поисковый робот и раскрывающиеся списки.
На сайте есть раскрывающийся список но я заметил что эти страницы в индекс поисковика не попадают.

Будет ли поисковый робот индексировать контент, который подгружается из БД?
Написал для тренировки блог, в котором все посты подгружаются из БД, будет ли поисковый робот.

Как написать свой робот отправки мыла юзерам?
как написать свой робот отправки мыла юзерам, не зная параметры сети или сетей, и после отправки.

Поисковый робот
С наступающим!:-) Ребят. Нужен небольшой теоретический совет. Приведу небольшую аналогию. При.

Вообще это сложный проект, и дело рук не двух программистов. Представьте только что придется обрабатывать не просто все виды ссылок, но и написать искусственный интеллект который будет способен в кратчайшие сроки выдать результат не просто по наибольшему количеству совпадений ключевых слов, но и синтаксически подходящую страницу. При том что каждый сайт, но говоря уже о каждой странице этого сайта, создается отдельным автором и имеет собственный стиль написания, и не все знают про правила заголовков h1, h2 . h6. Да и вообще мало что знают про поисковую оптимизацию.

Моя рекомендация: если нет знаний в сайтостроительстве — первым делом научитесь их создавать с нуля а затем на фреймворках с использованием ООП. Если есть знания — создайте сайт, заполните 50 страниц, и сделайте для этого сайта поиск по страницам. Думаю однообразность ссылок и страниц даст вполне реальную возможность ощутить свои силы и набраться опыта. А дальше как пойдет, всё зависит от Вас.

Источник

Русские Блоги

Сегодня, чтобы сделать PHPфильмМаленькая гадина
Давайте рассмотрим пример сбора данных simple_html_dom. Это библиотека PHP, с которой легко начать.
simple_html_dom может помочь нам использовать php для анализа HTML-документов. С помощью этого класса инкапсуляции PHP вы можете легко анализировать HTML-документы и работать с HTML-элементами (PHP5 + и выше).
Адрес загрузки: https://github.com/samacs/simple_html_dom
Ниже мы показываем его в виде страницы списка на http://www.paopaotv.com http://paopaotv.com/tv-type-id-5-pg-1.html в буквенном режиме. В качестве примера возьмем данные списка на странице и информацию в контенте

 find ("# letter-focus .letter-focus-item"); // $ listData является объектом массива foreach($listData as$key=>$eachRowData) < $ filmName = $ eachRowData->find ("dd span", 0) -> plaintext; // Получить название фильма $ filmUrl = $ eachRowData-> find ("dd a", 0) -> href; // Получить соответствующий адрес фильма и телевидения под dd // Получить подробную информацию о фильме и телевидении $filmInfo=file_get_html("http://paopaotv.com".$filmUrl); $filmDetail=$filmInfo->find(".info dl"); foreach($filmDetail as $film)< $info=$film->find("dd"); $row=null; foreach($info as $childInfo)< $row[]=$childInfo->plaintext; > $ cate [$ key] [] = join (",", $ row); // Сохраняем информацию о фильме и телевидении в массиве > >

Таким образом, с помощью simple_html_dom вы можете записывать информацию в список фильмов и телепередач paopaotv.com, а также конкретную информацию о фильме и телевидении, после чего вы можете продолжать собирать информацию о видеообращении на подробной странице фильма и телевидения, а затем сохранять всю информацию о фильме и телевидении для базы данных.
Ниже приведены общие атрибуты и методы simple_html_dom:

$html = file_get_html('http://paopaotv.com/tv-type-id-5-pg-1.html'); $e = $html->find("div", 0); // метка $e->tag; // Иностранный текст $e->outertext; // внутренний текст $e->innertext; // Простой текст $e->plaintext; // Дочерние элементы $e->children ( [int $index] ); // родительский элемент $e->parent (); // Первый дочерний элемент $e->first_child (); // Последний дочерний элемент $e->last_child (); // Последний элемент родного брата $e->next_sibling (); // Предыдущий братский элемент $e->prev_sibling (); // массив меток $ret = $html->find('a'); // Первый тег $ret = $html->find('a', 0);

Источник

Читайте также:  METANIT.COM
Оцените статью