PHP是世界上最好的语音
技术无罪,demo仅仅功学习和交流,如有侵权,请联系我删除。
phpspider框架框架的开发者写了一篇文章《我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》,之前一直想去用一用,但是耽搁了很长时间,周末发了点时间去使用它,并成功爬取了4000多条数据,基本上爬取了那个网站上面所有的内容了吧。
下载phpspider框架,看看里面的demo,对照这个开发文档,就可以开始上手写了,我觉得还是可以的吧。针对不同的网站稍微要注意的是要爬取的网站是否需要登录验证,手册也有说明,还有就是是否有数据提交这样的,举一反三都是一样的,需要看看请求。
在一个就是XPath吧,需要定位获取数据,如果不熟悉可以搜索下使用,然后写个运行前的测试一步一步的调试就可以了。
我爬取的是一个刚建不到一年的站,都是电子书。代码写的不是很规范,本来时求快想看看有多少本电子书,后面有觉得没有什么大用,都是百度云盘的,如果我要这些书,还得一个一个的获取好麻烦的。
我写的例子:
<?php
/**
* Created by PhpStorm.
* User: admin
* Date: 2019/12/08
* Time: 9:20
*/
ini_set("memory_limit", "10240M");
require_once __DIR__ . '/../autoloader.php';
use phpspider\core\phpspider;
use phpspider\core\requests;
use phpspider\core\selector;
use phpspider\core\db;
/* Do NOT delete this comment */
/* 不要删除这段注释 */
header("Content-Type:text/html;charset='utf-8'");
/*模拟提交数据之后显示提取码*/
// 登录请求url
$url = "https://www.nmod.net/book/10024.html";
// 提交的参数
$params = array(
"huoduan_verifycode" => "255698"
);
// 发送登录请求
requests::post($url, $params);
$configs = array(
'name' => 'NMOD电子书',
//'tasknum' => 8,
'log_show' => true,
'save_running_state' => false,
'domains' => array(
'www.nmod.net'
),
//
'scan_urls' => array(
"https://www.nmod.net",
),
'list_url_regexes' => array(
"https://www.nmod.net/page/\d+",
),
'content_url_regexes' => array(
"https://www.nmod.net/book/\d+.html",
),
'export' => array(
'type' => 'db',
'table' => 'list',
),
'db_config' => array(
'host' => '127.0.0.1',
'port' => 3306,
'user' => 'root',
'pass' => 'root',
'name' => 'nmod',
),
'fields' => array(
// 链接 👍
array(
'name' => "link",
'selector' => "//h1[contains(@class,'article-title')]/a[1]/@href",
'required' => true,
),
// 书名 👍
array(
'name' => "name",
'selector' => "//img[contains(@class,'alignleft')]/@title",
'required' => true,
),
//作者 alert-success 👍
array(
'name' => "author",
'selector' => "//div[contains(@class,'alert-success')]/p[3]",
'required' => true,
),
//格式 👍
array(
'name' => "format",
'selector' => "//div[contains(@class,'alert-success')]/p[4]",
'required' => true,
),
//标签 👍
array(
'name' => "tag",
'selector' => "//div[contains(@class,'breadcrumbs')]/a[last()]",
'required' => true,
),
//ISBN 编码 👍
array(
'name' => "isbn",
'selector' => "//div[contains(@class,'alert-success')]/p[7]",
'required' => true,
),
// 图片 //img[contains(@class,'alignleft')]/@src 👍
array(
'name' => "img",
'selector' => "//img[contains(@class,'alignleft')]/@src",
'required' => true,
),
// 云盘链接 //a[text()='百度网盘']/@href 👍
array(
'name' => "url",
'selector' => "//a[text()='百度网盘']/@href",
'required' => true,
),
// 提取码code 👍
array(
'name' => "code",
'selector' => "//article[contains(@class,'article-content')]/div[last()-1]//strong",
'required' => true,
),
),
);
$spider = new phpspider($configs);
$spider->on_start = function($phpspider)
{
requests::set_header('Referer','https://www.nmod.net/page/2');
/*连接数据库*/
$db_config = $phpspider->get_config("db_config");
db::set_connect('default', $db_config);
db::_init();
};
// 对匹配后的字段field进行回调处理
$spider->on_extract_field = function($fieldname, $data, $page)
{
echo 'start...2';
if($fieldname == 'url'){
$data = str_replace('https://www.nmod.net/go.html?', '', $data);
}
if($fieldname == 'format'){
$data = str_replace('格式:', '', $data);
}
if($fieldname == 'author'){
$data = str_replace('作者:', '', $data);
}
if($fieldname == 'code'){
$data = str_replace('提取码:', '', $data);
}
return $data;
};
// 数据入库操作
$spider->on_extract_page = function($page, $data)
{
// 入库
db::query("set names utf8");
// print_r($data);exit();
mysql_query("set names 'utf8");
db::insert("list", $res);
};
$spider->start();
就是这样就跑起来了。看数据库的数据一致在增加还是蛮开心的。
技术无罪,demo仅仅功学习和交流,如有侵权,请联系我删除。
网友评论