php 网页内容抓取
最近抓的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 网页内容抓取的更多相关文章
- 使用jsoup进行网页内容抓取
对网页内容的抓取比较的感兴趣,于是就简单的学习了一下,如果不使用任何的框架去抓取网页的内容,感觉有点难度,我就简单点来吧,这里所使用的jsoup框架,抓取网页的内容与使用jquery选择网页的内容差不 ...
- 网络爬虫WebCrawler(1)-Http网页内容抓取
在windows在下面C++由Http协议抓取网页的内容: 首先介绍了两个重要的包(平时linux在开源包,在windows下一个被称为动态链接库dll):curl包和pthreads_dll,其中c ...
- C# asp.net 抓取需要登录的网页内容 抓取asp.net登录验证的网站
private void btnASPNET_Click(object sender, EventArgs e) { Dictionary<string, s ...
- Java+Jsoup实现网页内容抓取
不知不觉毕业快一年了,工作逐渐趋于平淡,从一个对编程了解得很少甚至完全一窍不通的小小菜,终于成为了一枚小菜,总而言之,算是入了IT这一行.这大半年马马虎虎做了三个项目,有安卓项目,有Java Web项 ...
- Python 实现腾讯新闻抓取
原文地址:http://www.cnblogs.com/rails3/archive/2012/08/14/2636780.htm 思路: 1.抓取腾讯新闻列表页面: http://news.qq.c ...
- paip.抓取网页内容--java php python
paip.抓取网页内容--java php python.txt 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- Java 抓取网页内容
前两天想写一段自动提取微博状态的代码.据我所知,实现这个功能即可以用PHP写,也可以用Java写.我认为用Java写调试方便一点,PHP的脚本还要上传到服务器什么的. 代码很简单的,新建一个java. ...
- 使用Jsoup函数包抓取网页内容
之前写过一篇用Java抓取网页内容的文章,当时是用url.openStream()函数创建一个流,然后用BufferedReader把这个inputstream读取进来.抓取的结果是一整个字符串.如果 ...
- Asp.Net 之 抓取网页内容
一.获取网页内容——html ASP.NET 中抓取网页内容是非常方便的,而其中更是解决了 ASP 中困扰我们的编码问题. 需要三个类:WebRequest.WebResponse.StreamRea ...
随机推荐
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...
- Hibernate数据保存操作方法的原理对比
Interface Session All Superinterfaces: Serializable All Known Subinterfaces: EventSource, Session Al ...
- ideal的maven项目不小心remove module,如何找回
找回方式: ideal的最右侧有个maven projects 点开后点击“+”,也就是Add Maven Projects,寻找不小心remove modules 的 子项目的pom文件所在的位置, ...
- day 73 Django基础八之cookie和session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 x ...
- WannaCry结束了? 安专家注册域名掐断病毒传播
腾讯科技讯,(韩依民) 5 月 13 日,席卷全球的勒索病毒 WannaCry(也被称作 WanaCrypt 或 WCry),在今日晚间被互联网安全人员找到阻止其传播的方法. 据北京云纵信息技术有限公 ...
- QT 获取文件的路径、打开文件的弹出对话框
1.打开获取文件夹路径的对话框 QString filePath = QFileDialog::getExistingDirectory(this, "请选择文件保存路径...", ...
- low版九九乘法表
# while循环实现九九乘法表num_one = 1while num_one <= 9: num_two = 1 while num_two <= num_one: print(&qu ...
- Dash Speed【好题,分治,并查集按秩合并】
Dash Speed Online Judge:NOIP2016十联测,Claris#2 T3 Label:好题,分治,并查集按秩合并,LCA 题目描述 比特山是比特镇的飙车圣地.在比特山上一共有 n ...
- webpack打包出错分析
Module not found: Error: Can't resolve 'bundle.js' in 更改打包命令 webpack run1.js -o bundle.js
- C++: Type conversions
1.static_cast static_cast可以转换相关联的类,可以从子类转换成父类.也能从父类转向子类,但是如果转换的父类指针(或者父类引用)所指向的对象是完整的,那么是没有问题:但是 ...