我正在尝试从URL获取元标题和关键字。
我有Excel表中的URL列表,使用phpExcel库我首先获取URL,并在Foreach循环中运行。把我的结果写在新的Excel表格里
我的代码如下
<?php
include 'PHPExcel.php';
$objPHPExcel = new PHPExcel();
require_once 'PHPExcel/IOFactory.php';
$readFileName = "script_test.xlsx";
$target_file_path = "results.xlsx";
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($readFileName);
$objWorksheet = $objPHPExcel->getActiveSheet();
$objPHPExcel1 = PHPExcel_IOFactory::load($target_file_path);
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$i = 2;
for ($row = 1; $row <= $highestRow; ++$row)
{
$keyword_val = $objWorksheet->getCellByColumnAndRow(0, $row)->getValue();
$url_headers_details = get_headers($keyword_val, 1);
if($url_headers_details[0] = "HTTP/1.1 200 OK")
{
$html = file_get_contents_curl($keyword_val);
//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');
//get and display what you need:
$title = $nodes->item(0)->nodeValue;
$metas = $doc->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'keywords')
$keywords = $meta->getAttribute('content');
}
$objPHPExcel1->getActiveSheet()->setCellValue('A'.$i, $keyword_val);
if (!isset($title)) {
$objPHPExcel1->getActiveSheet()->setCellValue('B'.$i, "NA");
}
elseif (isset($title)) {
$objPHPExcel1->getActiveSheet()->setCellValue('B'.$i, $title);
}
if (!isset($keywords)) {
$objPHPExcel1->getActiveSheet()->setCellValue('C'.$i, "NA");
}
elseif (isset($keywords)) {
$objPHPExcel1->getActiveSheet()->setCellValue('C'.$i, $keywords);
}
$i++;
}
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel1, 'Excel2007');
$objWriter->save($target_file_path);
function file_get_contents_curl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
?>
此代码适用于少数域,但在少数域的情况下,它会引发如下错误:
Warning: get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31
Warning: get_headers(http://www.mrmeticulous.com.au ): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31
Notice: Trying to get property of non-object in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 45
Warning: get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /opt/lampp/htdocs/Qdrive/test/KinjalG/PHPExcel-develop/Classes/meta_titles_keywords.php on line 31
我哪里做错了?
谢啦
我可以调试我自己:)
如果需要添加条件,则解决方案很简单。代替
$nodes = $doc->getElementsByTagName('title');
//get and display what you need:
$title = $nodes->item(0)->nodeValue;
由
$nodes = $doc->getElementsByTagName('title');
($nodes->length>0) {
//get and display what you need:
$title = $nodes->item(0)->nodeValue;
}
行$节点=$doc-
我正在用python运行下面的代码 我每次都会遇到下面的错误-有人能帮忙吗! OpenCV错误:未指定的错误(该函数未实现。使用Windows、GTK 2.x或Carbon支持重建库。如果您在Ubuntu或Debian上,请安装libgtk2.0-dev和pkg config,然后重新运行cmake或configure脚本),位于cvShowImage、file/Users/travis/buil
问题内容: 我在让Chai的node.js应用程序进行测试时遇到问题。测试会不断导致抛出的错误,但是如果我将测试用例包装在try和catch中并断言所捕获的错误,它将起作用。 难道不喜欢的工作,我认为它应该还是什么? 失败: 问题答案: 您必须将一个函数传递给。像这样: 执行此操作的方式将传递给call的结果。但是要测试是否抛出了某些东西,您必须将一个函数传递给,该函数会自行调用。上面使用的方法创
问题内容: 我有2个项目(相互连接和通信)在2个tomcat实例上运行。在我本地,我有2只雄猫在奔跑。在所有不同的浏览器上,一切都很好,但IE却表示访问被拒绝加载Java文件。因此,我包括了一个图书馆,该图书馆可以解决 本地 问题。 但是当我再次将代码部署到DEV环境上2个不同的tomcat实例(在Dev服务器上)时,我看到相同的错误,访问被拒绝。 而且我与项目1相关的所有文件(例如js / cs
有人可以解释我什么时候使用关键字 throw new 有用.而不是在方法的签名旁边使用抛出? 我知道当方法抛出Checked Exception时。Java迫使我们通过将Exception处理到try-catch块中,或者通过在签名旁边的关键字throws指定将在其他地方完成,从而直接在方法中处理它。 然而,我很难理解何时使用关键字throw new是有用的,以及为什么。它与处理未选中的异常有关吗
我有两个类(SimManager和Sim),我想为它们创建模拟对象,然后使用存根方法。 测试在上面第9行抛出这两个错误跟踪。 第一: Java语言lang.VerifyError:org/mockito/cglib/core/reflectils at org。莫基托。cglib。果心KeyFactory$发电机。在org上生成Class(KeyFactory.java:167)。莫基托。cgli
我在视图中有一个ImageView,并尝试用它显示一个WritableImage实例。我正在外线程中绘制它,并通过侦听ObjectProperty的更改事件将其传递给视图。 imageView应该准备好接收图像,它由我的主视图显示。但是这是一个不合法的例外 线程“Thread-4”Java . lang . illegalstateexception中的异常:不在FX应用程序线程上;当前线程=线程
我有下面的代码,它按照预期工作: 我想知道是否有一种方法,只有一个orElseThrow-Part,或做它更少的冗余?
我向服务器调用一个请求网络,服务器总是响应如下所示的格式json: 对于每种请求,只有jsonObject数据包含不同的字段。新响应的示例: 因此,我决定让一个通用类调用ServerResult包含一个字段“Object”,以便将其强制转换为特定对象。 //ServerResult.class //client.java 请求完成后,我通过GSON将json转换为ServerResult对象: 然