phpspider在列表页面上生成内容采集URL. (又名: 如何通过搜狗搜索关键字

优采云 发布时间: 2020-08-06 12:04

  行业解决方案和产品招募!如果您想赚钱就通过它! >>>

  

  我需要采集一些与广播有关的新闻. 百度搜索了它. 最初的想法是去网易,搜狐或其他大型新闻平台搜索和搜索关键字.

  事实证明,网易新闻没有搜索新闻的入口,搜狐搜索到的许多新闻都是视频过滤的,这比较困难而且有点困难.

  后来,人们发*敏*感*词*,为别人做结婚服……对我来说真便宜,呵呵

  所以我决定抓取搜狗的搜索页面,

  1. 首先提取网址

  %+%B5%E7%CC%A8&_ast = 1585809152&_asf =&time = 0&w = 03009900&sort = 0&mode = 2&manual = true&dp = 1

  

  2. 然后获取他的列表页面的规则

  进入此网站,您可以快速编写常规比赛. 实际上,它是找到页面的页面参数字段,然后将值更改为常规数字,将其替换并完成. .简单,找到规则</p

pimg src='https://oscimg.oschina.net/oscnet/up-459df26a44e4865271c79dc7313d3ded1c7.png' alt=''//p

p3. 详细信息页面的匹配规则,/p

p因为详细信息页面都是以. 结尾的网址,所以他的规律性也很容易写/p

pprespan style="background-color:#232525; color:#6a8759"((https|http)?:\/\/)[^\s]{1,6}.sina.com.cn/[a-z]{1,10}/.*.shtml/span/pre/p

p4. 让我谈谈我踩到的一些坑/p

p4.1: 在搜狗搜索页面下方,无法获得内容详细信息页面的网址/p

p原因: 由于域名的主要域名要求您同时填写采集的内容页面和详细信息页面开头的域名,因此,如果不填写,则不会被采集. 因此,我在自己的域名下填写了大量新浪的姓氏. 级别域/p

pimg src='https://oscimg.oschina.net/oscnet/up-e530ee005a716ee35069efa01dddaa2e150.png' alt=''//p

p4.2: 我已经采集了不应采集的文章详细信息,我只想要搜索文章结果的网址/p

p分析: phpspider通常根据配置中的content_url_regexes匹配列表页面中的URL,然后将其提升并采集为详细信息页面. 这样,它将采集一些不属于的URL搜索内容./p

p方法: 重写Spider的on_list_page方法,直接在列表页面中提取html,通过选择器提取所需的url元素,然后插入内容页面,然后返回false,并且不再插入其他获得的内容url/p

pprecode//采集列表页

$spider->on_list_page = function($page, $content, $phpspider)

{

// 在列表页中通过XPath提取到内容页URL 这里获取的是数组,所以下面要进行循环

$content_url = \phpspider\core\selector::select($content,"//h3[@class='vrTitle']/a/@href");

if(!empty($content_url)){

foreach ($content_url as $k=>$v){

$phpspider->add_url($v);

}

}

return false;

};

  4.3如何匹配多个规则,例如,某些文章的内容div的id是article,而另一些是article_content

  分析: 在xpath中使用名为或的东西,如下所述,并用“ |”分隔不同的规则. 起初我没有注意到它,但是后来感觉很容易使用

  'selector' => "//div[@id='article_content']//p|//div[@id='article']//p|//div[@class='img_wrapper']",

  4.4获得的内容可能是数组,我该怎么办?

  在设置中将repeat设置为true,然后使用该方法在文档中搜索特定视图

  我的用法是在文章的内容中获取P标签和图片标签,因为其中收录任何嵌入的广告,因此很难一一消除. 我只是简单地把p里面. 然后图片结束了,然后我自己将其缝成一个字符串.

  配置配置:

  [

'name' => "content",//网站内容

'selector' => "//div[@id='article_content']//p|//div[@id='article']//p|//div[@class='img_wrapper']",

'required'=>false,

'repeated' => true,

],

  采集结果后,用于处理的on_extract_field函数将直接对其进行判断. 如果有图片,请使用div拼接图片,否则,请拼接ap标签并将其字符串化为字符串. 然后使用json,压缩为字符串,转换为base64,存储在数据库中(占用更少的空间)</p

pprecode//详情页=>提取字段=>处理字段

$spider->on_extract_field = function($fieldname, $data, $page)

{

if($fieldname=='content'){

$data_str='';

if(!empty($data)){

//循环拼接成字符串

foreach ($data as $k=>$v){

if(strstr($v,"img")!==false){

$data_str.="".$v."";

}else{

$data_str.="<p>".$v."";

}

}

$content=json_encode($data_str,JSON_UNESCAPED_UNICODE);//转成json

$content_gz=gzcompress($content);//压缩字符串

$data=base64_encode($content_gz);//组成base64

}else{

$data='';

}

return $data;

}

return $data;

};</p>

  5. 在我的代码上

  注意: 这里的phpspider指的是陆金,需要根据其自身的实际路由进行引用. 然后,我为数据库配置编写了一个单独的config.php,作为所有集合文件的通用导入文件

<p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线