最近抓的2个网站内容的代码

列表页抓取:第一种使用phpquery插件,可以快速获取,第二种它是api,所以直接获取

load_third("phpQuery.php");

/*********www.sosobtc.com***********/
/**/
$re = phpQuery::newDocumentFile('https://www.sosobtc.com/news/all'); //设置好抓取的新闻列表网址
$data = array(); // 获取列表地址
foreach(pq('.news-list .news-thumbnail a') as $key=>$value) {
$href = $value->getAttribute('href');
$data[$key]['source_url'] = "https://www.sosobtc.com".$href;
} // 获取标题
foreach(pq('.news-list .news-title h3') as $key=>$value) {
$title = pq($value)->text();
$data[$key]['title'] = $title;
} // 获取封面图地址
foreach(pq('.news-list .share-box ul') as $key=>$value) {
$re = pq($value)->find('li')->eq(0)->find('a')->attr('href');
$str = strrchr($re,"&");
$arr= explode("=",$str);
$data[$key]['pic'] = $arr[1]; $str2 = explode("/",$arr[1]);
$data[$key]['add_time'] = strtotime($str2[5]);
} //获取信息初始来源
foreach(pq('.category') as $key=>$value) {
$source = pq($value)->text();
$data[$key]['source'] = $source;
} // exit;
foreach($data as $v){
$adddata['title'] = $v['title'];
$adddata['source_url'] = $v['source_url'];
$adddata['add_time'] = time();
$adddata['add_time'] = $v['add_time'];
$adddata['pic'] = $v['pic'];
$adddata['source'] = $v['source'];
// $adddata['stype'] = 1;
$result = News::add($adddata);
if(!$result['insert_id']){
file_put_contents("/data/log/fail_spider.log",var_dump($result).",".$v['source_url'].",".$v['pic']."\r\n",FILE_APPEND);
}
} /*********www.sosobtc.com***********/ /*********www.36kr.com/***********/
$result = file_get_contents("http://36kr.com/api/search-column/208?per_page=20&page=1"); if(!$result){
die;
} $result = json_decode($result,true); if(count($result['data']['items'])==0){
die;
} foreach($result['data']['items'] as $k=>$v){
$sdata['add_time'] = strtotime($v['published_at']);
$sdata['title'] = $v['title'];
$sdata['pic'] = $v['template_info']['template_cover'][0];
$info = json_decode($v['user_info'],true);
$sdata['source'] = $info['name'];
$sdata['source_url'] = "http://36kr.com/p/".$v['id'].".html"; $re = News::add($sdata);
if(!$re['insert_id']){
file_put_contents("/data/log/fail_spider.log",var_dump($re).",".$v['source_url'].",".$v['pic']."\r\n",FILE_APPEND);
}
} /*********www.36kr.com/***********/

先获取的列表内容,再根据列表对应的目标地址,再去挨个抓取详情,

详情页面抓取:

load_third("phpQuery.php");

function download($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME); $path = '/data/xxxxx.com/phone/wwwroot/upimg/';//**************注意权限问题
$dirarr = explode("/",$url);
$path .= $dirarr[5]."/"; if (!is_dir($path)) mkdir($path); $resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
return "/".$dirarr[5]."/".$filename;
} function download2($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME).".jpg"; $path = '/data/xxxxx.com/phone/wwwroot/upimg/';//**************注意权限问题
$path .= date("Ymd")."/"; if (!is_dir($path)) mkdir($path); $resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
return "/".date("Ymd")."/".$filename;
} $result = News::getdown(); if(count($result)==0){
exit(2);
} foreach($result as $v)
{ if(strpos($v['source_url'],'sosobtc')){ $path = download($v['pic']);//下载图片到本地 $re = phpQuery::newDocumentFile($v['source_url']); //设置好抓取的新闻列表网址
$content = pq(".article-main")->html(); // $id = $v['id'];
$data['pic'] = $path;
$data['content'] = addslashes(trim($content));
$data['status'] = 1; $result = News::modify($v['id'],$data);
if(!$result){
file_put_contents("/data/log/fail_spiderdown.log",$v['id']."|".var_dump($result)."|".json_encode($data)."\r\n",FILE_APPEND);
}
}else if(strpos($v['source_url'],'36kr')){
// echo $v['id']."\r\n"; $path = download2($v['pic']);//下载图片到本地 $re = file_get_contents($v['source_url']); //设置好抓取的新闻列表网址
preg_match("/<script>var props=(.*),locationnal={/",$re,$match);
$info = json_decode($match[1],true);
$content = $info['detailArticle|post']['content']; $data['pic'] = $path;
$data['content'] = $content;
$data['status'] = 1; $result = News::modify($v['id'],$data);
// print_r($data);
// break;
$result = News::modify($v['id'],$data);
if(!$result){
file_put_contents("/data/log/fail_spiderdown.log",$v['id']."|".var_dump($result)."|".json_encode($data)."\r\n",FILE_APPEND);
}
} }

第一种还是用phpquery抓取。第二种查看源代码,它是js数据懒加载的,所以我直接php正则匹配我需要的数据。 其中我把二者的封面图都下载到本地了,本地的upimg主要要给权限,否则创建日期目录可能会失败。还有一点,我对source_url 也就是目标网址 mysql字段做了唯一索引,这样 我每天2个脚本定时跑,可以抓到最新数据,同时又不会抓到重复数据。

php 网页内容抓取的更多相关文章

  1. 使用jsoup进行网页内容抓取

    对网页内容的抓取比较的感兴趣,于是就简单的学习了一下,如果不使用任何的框架去抓取网页的内容,感觉有点难度,我就简单点来吧,这里所使用的jsoup框架,抓取网页的内容与使用jquery选择网页的内容差不 ...

  2. 网络爬虫WebCrawler(1)-Http网页内容抓取

    在windows在下面C++由Http协议抓取网页的内容: 首先介绍了两个重要的包(平时linux在开源包,在windows下一个被称为动态链接库dll):curl包和pthreads_dll,其中c ...

  3. C# asp.net 抓取需要登录的网页内容 抓取asp.net登录验证的网站

    private void btnASPNET_Click(object sender, EventArgs e)        {            Dictionary<string, s ...

  4. Java+Jsoup实现网页内容抓取

    不知不觉毕业快一年了,工作逐渐趋于平淡,从一个对编程了解得很少甚至完全一窍不通的小小菜,终于成为了一枚小菜,总而言之,算是入了IT这一行.这大半年马马虎虎做了三个项目,有安卓项目,有Java Web项 ...

  5. Python 实现腾讯新闻抓取

    原文地址:http://www.cnblogs.com/rails3/archive/2012/08/14/2636780.htm 思路: 1.抓取腾讯新闻列表页面: http://news.qq.c ...

  6. paip.抓取网页内容--java php python

    paip.抓取网页内容--java php python.txt 作者Attilax  艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...

  7. Java 抓取网页内容

    前两天想写一段自动提取微博状态的代码.据我所知,实现这个功能即可以用PHP写,也可以用Java写.我认为用Java写调试方便一点,PHP的脚本还要上传到服务器什么的. 代码很简单的,新建一个java. ...

  8. 使用Jsoup函数包抓取网页内容

    之前写过一篇用Java抓取网页内容的文章,当时是用url.openStream()函数创建一个流,然后用BufferedReader把这个inputstream读取进来.抓取的结果是一整个字符串.如果 ...

  9. Asp.Net 之 抓取网页内容

    一.获取网页内容——html ASP.NET 中抓取网页内容是非常方便的,而其中更是解决了 ASP 中困扰我们的编码问题. 需要三个类:WebRequest.WebResponse.StreamRea ...

随机推荐

  1. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...

  2. Hibernate数据保存操作方法的原理对比

    Interface Session All Superinterfaces: Serializable All Known Subinterfaces: EventSource, Session Al ...

  3. ideal的maven项目不小心remove module,如何找回

    找回方式: ideal的最右侧有个maven projects 点开后点击“+”,也就是Add Maven Projects,寻找不小心remove modules 的 子项目的pom文件所在的位置, ...

  4. day 73 Django基础八之cookie和session

      Django基础八之cookie和session   本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 x ...

  5. WannaCry结束了? 安专家注册域名掐断病毒传播

    腾讯科技讯,(韩依民) 5 月 13 日,席卷全球的勒索病毒 WannaCry(也被称作 WanaCrypt 或 WCry),在今日晚间被互联网安全人员找到阻止其传播的方法. 据北京云纵信息技术有限公 ...

  6. QT 获取文件的路径、打开文件的弹出对话框

    1.打开获取文件夹路径的对话框 QString filePath = QFileDialog::getExistingDirectory(this, "请选择文件保存路径...", ...

  7. low版九九乘法表

    # while循环实现九九乘法表num_one = 1while num_one <= 9: num_two = 1 while num_two <= num_one: print(&qu ...

  8. Dash Speed【好题,分治,并查集按秩合并】

    Dash Speed Online Judge:NOIP2016十联测,Claris#2 T3 Label:好题,分治,并查集按秩合并,LCA 题目描述 比特山是比特镇的飙车圣地.在比特山上一共有 n ...

  9. webpack打包出错分析

    Module not found: Error: Can't resolve 'bundle.js' in 更改打包命令 webpack run1.js  -o bundle.js

  10. C++: Type conversions

    1.static_cast     static_cast可以转换相关联的类,可以从子类转换成父类.也能从父类转向子类,但是如果转换的父类指针(或者父类引用)所指向的对象是完整的,那么是没有问题:但是 ...