PHP web抓取HTMLDOM分页

时间:2017-04-22 07:40:29

标签: php web-scraping pagination screen-scraping simple-html-dom

我正在抓取这个网址,因为这是我的最后一年项目,但这段代码只报废了1页搜索查询我希望分页(如1,2,3,4,5)最后请帮助

我已经实现了一个数据抓取脚本,该脚本使用CURL获取数据。

但是这个获取记录只有一页,但我想要所有数据,因为在那个页面上有分页。

<form action="" method="post" class="form-horizontal" id="home-search">
<input type="text" name="keyword" id="keyword">
<input type="submit">         
</form>
<?php
if(isset($_POST['keyword'])){
$keyword = urlencode($_POST['keyword']);
ini_set('display_errors', 1);

    ini_set('max_execution_time', 300);
$html = file_get_contents('https://www.bestjobs.co.za/jobs/?q='.$keyword);
//echo $html;
$indeedDotPk = array();
//$html = file_get_contents($result);
libxml_use_internal_errors( true);
$doc = new DOMDocument;
$doc->loadHTML($html);
$xpath = new DOMXpath( $doc);

$node = $xpath->query( '//div[@class="paginas"]/ul/li/a/@href');
$total_pages = 0;
$start = 0;
$job_title_index = 0;
$job_link_index = 0;
$job_description_index = 0;
$job_experience_index = 0;

foreach ($node as $key => $value) {
    $total_pages++;
    // echo $value->textContent;
    // echo "<br>";
    // echo "<br>";
    // echo "<br>";
}

for ($i=0; $i < $total_pages; $i++) { 
     ini_set('max_execution_time', 300);
    $html = file_get_contents('https://www.bestjobs.co.za/jobs/?q='.$keyword.'&start='.$start);
    libxml_use_internal_errors( true);
    $doc = new DOMDocument;
    $doc->loadHTML($html);
    $xpath = new DOMXpath( $doc);

     // Job Description
    $node = $xpath->query('//a[@class="js-o-link"]');
    foreach ($node as $key => $value) {
        if(is_string($value->textContent)){
            $indeedDotPk[$job_description_index++]['job_description'] = $value->textContent;
        }
    }
    // Job Description

    $start = $start + 10;
}

  foreach ($indeedDotPk as $key => $value) {
   if(!empty($value['job_description'])){

?>

<table border="1">
<tr >
    <td>

    </td>

    <td>

    </td>

    <td>

    </td>

    <td>
        <?php echo $value['job_description']?>
    </td>
 </tr>

有没有人知道我最终如何设置分页,如1,2,3,4,5?

如果有人有任何建议,请帮助我。

...谢谢

1 个答案:

答案 0 :(得分:0)

将分页参数传递给网址,如下所示

https://www.bestjobs.co.za/jobs/?q=sales&p=2

将函数中的所有内容包装起来并使用for循环将分页参数传递给函数,如此

function webScrap($p){
//scrapping code
}

for($i=0;$i>=100;$i++){
webScrap($i);
}