Ne yerleşik PHP fonksiyonları web kazıma için yararlıdır? PHP ile kazıma web hızlandırmak için almak için bazı iyi kaynaklar (web ya da baskı) nelerdir?
Bir Değerlendirmenizi görmek here - Bir Book "Webbots, Spiders, and Screen Scrapers: A Guide to Developing Internet Agents with PHP/CURL" bu konuda var
PHP-Mimar Matthew Turland tarafından December 2007 Issue olarak iyi yazılmış bir makalede kapladım
Kazıma genellikle 3 adımları kapsar:
1. ve 2. adımları gerçekleştirmek için, aşağıdaki GET veya POST kullanarak web sayfalarını almak için Curl kullanan basit bir PHP sınıfı. Eğer HTML geri aldıktan sonra, sadece size kazımak istiyorum metin üzerinden ayrıştırma adım 3 gerçekleştirmek için normal ifadeleri kullanabilirsiniz.
For regular expressions, my favorite tutorial site is the following: Regular Expressions Tutorial
RegExs ile çalışmak için Favori program Regex Buddy. Ben bunu satın alma niyetim yok olsa bile bu ürünün demo denemek için tavsiye ediyorum. Bu paha biçilmez bir araçtır ve hatta (php dahil) seçtiğiniz dilde yapmak sizin regexs için kod üretecektir.
Kullanımı:
$curl = new Curl();
$html = $curl->get("http://www.google.com");
// now, do your regex work against $html
PHP Class:
<?php
class Curl
{
public $cookieJar = "";
public function __construct($cookieJarFile = 'cookies.txt') {
$this->cookieJar = $cookieJarFile;
}
function setup()
{
$header = array();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: "; // browsers keep this blank.
curl_setopt($this->curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($this->curl,CURLOPT_COOKIEJAR, $cookieJar);
curl_setopt($this->curl,CURLOPT_COOKIEFILE, $cookieJar);
curl_setopt($this->curl,CURLOPT_AUTOREFERER, true);
curl_setopt($this->curl,CURLOPT_FOLLOWLOCATION, true);
curl_setopt($this->curl,CURLOPT_RETURNTRANSFER, true);
}
function get($url)
{
$this->curl = curl_init($url);
$this->setup();
return $this->request();
}
function getAll($reg,$str)
{
preg_match_all($reg,$str,$matches);
return $matches[1];
}
function postForm($url, $fields, $referer='')
{
$this->curl = curl_init($url);
$this->setup();
curl_setopt($this->curl, CURLOPT_URL, $url);
curl_setopt($this->curl, CURLOPT_POST, 1);
curl_setopt($this->curl, CURLOPT_REFERER, $referer);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $fields);
return $this->request();
}
function getInfo($info)
{
$info = ($info == 'lasturl') ? curl_getinfo($this->curl, CURLINFO_EFFECTIVE_URL) : curl_getinfo($this->curl, $info);
return $info;
}
function request()
{
return curl_exec($this->curl);
}
}
?>
Ben tavsiye Goutte, a simple PHP Web Scraper.
Create a Goutte Client instance (which extends
Symfony\Component\BrowserKit\Client
):
use Goutte\Client;
$client = new Client();
request()
yöntemi ile isteklerini yapmak:
$crawler = $client->request('GET', 'http://www.symfony-project.org/');
The request
method returns a Crawler
object
(Symfony\Component\DomCrawler\Crawler
).
Linklere tıklayın:
$link = $crawler->selectLink('Plugins')->link();
$crawler = $client->click($link);
Formlarını Gönder:
$form = $crawler->selectButton('sign in')->form();
$crawler = $client->submit($form, array('signin[username]' => 'fabien', 'signin[password]' => 'xxxxxx'));
Veri ayıklayın:
$nodes = $crawler->filter('.error_list');
if ($nodes->count())
{
die(sprintf("Authentification error: %s\n", $nodes->text()));
}
printf("Nb tasks: %d\n", $crawler->filter('#nb_tasks')->text());
İşte cURL
ve file_get_contents
kullanarak web kazıma üzerinde bir ok öğretici (kaldırıldı bağlantı, aşağıya bakınız) bulunuyor. De önümüzdeki birkaç parça okumak Besure.
(Malware dolayı uyarıları kaldırıldı direkt köprü)
http://www.oooff.com/php-scripts/basic-php-scraped-data-parsing/basic-php-data-parsing.php
Aslında onlar oluşturmak için arıyorum, bir web uygulaması için erişim ayetleri bir API sağlamak yok gibi BibleGateway.com kazımak için arıyorum.
Eğer onların site içeriği dayanarak, gerçek zamanlı yani update 'hotlink' için çalışırken ziyade kazımak olabilir gibi geliyor?
Bu eğitimde oldukça iyi:
http://www.merchantos.com/makebeta/php/scraping-links-with-php/
Ayrıca Prowser bakmak isteyebilirsiniz.
Korumak için kolay bir şey, yerine yürütmek hızlı gerekiyorsa, bu tür SimpleTest's gibi bir script tarayıcı kullanmak yardımcı olabilir.
Benim çerçevesinden Kazıyıcı sınıfı:
<?php
/*
Example:
$site = $this->load->cls('scraper', 'http://www.anysite.com');
$excss = $site->getExternalCSS();
$incss = $site->getInternalCSS();
$ids = $site->getIds();
$classes = $site->getClasses();
$spans = $site->getSpans();
print '<pre>';
print_r($excss);
print_r($incss);
print_r($ids);
print_r($classes);
print_r($spans);
*/
class scraper
{
private $url = '';
public function __construct($url)
{
$this->url = file_get_contents("$url");
}
public function getInternalCSS()
{
$tmp = preg_match_all('/(style=")(.*?)(")/is', $this->url, $patterns);
$result = array();
array_push($result, $patterns[2]);
array_push($result, count($patterns[2]));
return $result;
}
public function getExternalCSS()
{
$tmp = preg_match_all('/(href=")(\w.*\.css)"/i', $this->url, $patterns);
$result = array();
array_push($result, $patterns[2]);
array_push($result, count($patterns[2]));
return $result;
}
public function getIds()
{
$tmp = preg_match_all('/(id="(\w*)")/is', $this->url, $patterns);
$result = array();
array_push($result, $patterns[2]);
array_push($result, count($patterns[2]));
return $result;
}
public function getClasses()
{
$tmp = preg_match_all('/(class="(\w*)")/is', $this->url, $patterns);
$result = array();
array_push($result, $patterns[2]);
array_push($result, count($patterns[2]));
return $result;
}
public function getSpans(){
$tmp = preg_match_all('/(<span>)(.*)(<\/span>)/', $this->url, $patterns);
$result = array();
array_push($result, $patterns[2]);
array_push($result, count($patterns[2]));
return $result;
}
}
?>
Burada başka biri: basit bir PHP Scraper without Regex.