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 ...
随机推荐
- MySQL 其他基础知识
-- 查询存储引擎show engines;-- 显示可用存储引擎show variables like 'have%'; -- concat多个字段联合select tname ,cname ,co ...
- ajax跨域获取网站json数据
由于自己的公司的项目需要调用视频地址 1:当为链接时:直接在播放器用数据库查找的地址 2:当为外部链接时:直接用window.location.href('数据库查找的地址') 3:当为H5链接时:使 ...
- 驱动层hook系统函数的时,如何屏蔽掉只读属性?
对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志.当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向只读页面执行写操作:当该位复位时则 ...
- Java必备的几个开发工具,你会几个?
Java技术栈 www.javastack.cn 优秀的Java技术公众号 以下是Java技术栈微信公众号发布的所有关于 Java 常用工具干货,会从以下几个方面汇总,本文会长期更新. 开发工具篇 M ...
- 面试系列 30 如何自己设计一个类似dubbo的rpc框架
其实一般问到你这问题,你起码不能认怂,因为既然咱们这个课程是短期的面试突击训练课程,那我不可能给你深入讲解什么kafka源码剖析,dubbo源码剖析,何况我就算讲了,你要真的消化理解和吸收,起码个把月 ...
- 如何给DropDownListFor设置默认值
1.直接赋值: @Html.DropDownListFor(o => o.ParentId, ViewBag.root as IEnumerable<SelectListItem>, ...
- Carthage使用
# carthage 包管理 ## 安装过程 1) 安装homebrew ``` ruby$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githu ...
- 2018-11-19-WPF-在image控件用鼠标拖拽出矩形
title author date CreateTime categories WPF 在image控件用鼠标拖拽出矩形 lindexi 2018-11-19 15:35:13 +0800 2018- ...
- display: -webkit-box; 做个小小试验
最近做个微信项目发现css3在微信内部浏览器中和其他浏览有些区别 做个小小笔记 .job { display: -webkit-box; display: flexbox; -webkit-box-p ...
- python Selenium chromedriver 自动化超时报错:你需要使用多标签保护罩护体
在使用selenium + chrome 作自动化测试的时候,有可能会出现网页连接超时的情况 如果出现网页连接超时,将会导致 webdriver 也跟着无法响应,不能继续进行任何操作 即时是去打开新的 ...