1. querylist真的挺好用的!!!感谢!!!参考链接:https://learnku.com/laravel/t/6262/querylist-4-concise-and-elegant-php-collection-tool 
  2. 文档v4:http://querylist.cc/docs/guide/v4/example
  3. 记录几个rules,仅方便自己查看
    $rules = [
        'p1' => ['#side > div.content.clearfix > div.content_left > div.centent_centent > p:nth-child(1)', 'text'],  //文本,比如图片就会被过滤掉
        'content' => ['#side > div.content.clearfix > div.content_left > div.centent_centent', 'html'],  //HTML 包含标签等,图片会爬下来,类似富文本
        'img' => ['#side > div.content.clearfix > div.content_left > div.centent_centent > p:nth-child(4) > img', 'src'],  //图片的链接
         'alt' => ['#side > div.content.clearfix > div.content_left > div.centent_centent > p:nth-child(4) > img', 'alt'],  //img 的 alt
    'a' => ['h3>a', 'href']; //a 标签的href 链接
    ];

     

  4. 简单记录一下在爬取数据保存数据的过程中遇到的头疼的问题,问题是:爬取到的数据是乱码的(数据content是富文本,包含标签的),然后我想着使用header('Content-Type: *; charset=utf-8');  设置字符集,数据是爬到了,但是保存到数据库却是空的(成功保存了,但内容为空)。不知道是什么原因,是因为字符编码的原因导致mysql不能 保存数据 还是因为别的原因,我到现在也还没找到根源。(自己太菜了-_-#)。我一步一步排错,(1)打印数据是有内容的(2)打印SQL语句在命令行执行,也成功了(数据库保存了正常的数据)。(3)PDO,mysqli都尝试了(都成功地向数据库插入了空值)。(4)我还一度尝试SQL语句的单引号、双引号更改,然并卵----------我也是醉了。。。。。后来看到iconv,又尝试iconv (没办法的时候,就是不断的尝试各种可能)。发现成功了。虽然成功了,但是不知道什么原因 #_-  |  -_#  猜测是因为mysql有着字符编码的限制吧。反正爬虫的时候不要用header 设置字符编码,应该使用iconv 来转换字符编码。就能够正常保存到数据库。

     1 <?php
     2 
     3 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
     4 // 驾照资讯内容爬取url:http://www.jsyst.cn/ksjq/km1/index.asp?page=7 //
     5 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
     6 
     7 require '../querylist_spider/vendor/autoload.php';
     8 
     9 
    10 use QL\QueryList;
    11 
    12 //header('Content-Type: *; charset=gb2312');  //我开启这个之后,爬取的数据无法保存到数据库,找了一天的bug,没找到问题,第二天换了一个转码方式,iconv() 成功保存了。心里真的有一万只草拟马,同时感到自己真的是太菜了,#-_-#
    13 
    14 // $page = [1, 2, 3, 4, 5, 6, 7, 8];
    15 $page = [1, 2];
    16 // 获取a标签的内容以及url
    17 foreach ($page as $key => $value) {
    18     $aUrl[] = 'http://www.jsyst.cn/ksjq/km1/index.asp?page='.$value;
    19 }
    20 
    21 for ($i = 1; $i <= 10; $i++) {
    22     $rule[$i]['title'] = ["#side > div.content.clearfix > div.content_left > div > p:nth-child({$i}) > a", 'text'];
    23     $rule[$i]['url'] = ["#side > div.content.clearfix > div.content_left > div > p:nth-child({$i}) > a", 'href'];  // 要爬取的详情页的url
    24 }
    25 
    26 foreach ($aUrl as $key => $value) {
    27     foreach ($rule as $k => $v) {
    28         $list[] = QueryList::rules($v)->get($value)->query()->getData()->all();
    29     }
    30 }
    31 
    32 // print_r($list); exit('list exit code');
    33 
    34 $rules = [
    35     //'p1' => ['#side > div.content.clearfix > div.content_left > div.centent_centent > p:nth-child(1)', 'text'],
    36     'content' => ['#side > div.content.clearfix > div.content_left > div.centent_centent', 'html'],
    37     //'img' => ['#side > div.content.clearfix > div.content_left > div.centent_centent > p:nth-child(16) > img', 'alt'],
    38 ];
    39 
    40 foreach ($list as $key => $value) {
    41     $data[$key]['content'] = QueryList::rules($rules)->get($value[0]['url'])->query()->getData()->all()[0]['content'];
    42     $data[$key]['title'] = $value[0]['title'];
    43     if ($key == 5) {
    44         break;
    45     }
    46 }
    47 
    48 // file_put_contents('./data.txt', var_export($data, true));
    49 // print_r($data);
    50 // exit;
    51 
    52 // 插入数据库
    53 
    54 $link = mysqli_connect('localhost', 'root', 'root', 'count') or exit('链接数据库失败');
    55 //$link->query('set charset=utf8');
    56 
    57 $addtime = $updatetime = time();
    58 foreach ($data as $key => $value) {
    59     $title = iconv('gb2312', 'utf-8', $value['title']);
    60     $content = iconv('gb2312', 'utf-8', $value['content']);
    61     
    62     $sql = 'INSERT INTO drive_cheats (title, content, addtime, updatetime) VALUES (\''.$title.'\', \''.$content.'\', \''.$addtime.'\', \''.$updatetime.'\'); ';
    63     // echo $sql;exit;
    64     $res = mysqli_query($link, $sql);
    65     if (!$res) {
    66         echo mysqli_error($link);
    67     } else {
    68         // echo '<font color="red">success</font>';
    69         // echo mysqli_info($link);
    70         echo mysqli_insert_id($link);
    71     }
    72     echo $sql;
    73 }
    74 
    75 mysqli_close($link);

    View Code