我已经翻译了PHP Simple HTML DOM查询:
$article->find('td[id$=tdDescription] div a', 1)->plaintext;
Run Code Online (Sandbox Code Playgroud)
到jsoup查询:
resultRow.select("td[id$=tdDescription] > div > a").first().text());
Run Code Online (Sandbox Code Playgroud)
你可以看到我正在接受PHP的第二个(1)结果,目前在jsoup中使用.first()我正在访问第一个结果(0)但是我也想访问第二个结果(1),怎么会我这样做?
我正在尝试解析一个HTML文件,该文件具有可怕的(相信我,它是)HTML结构,由于这个和我缺乏知识,我无法编写自己的解析器.后来我尝试使用Simple HTML Dom解析器,因为很多人(也在SO上)推荐它.
我需要simple_html_dom.php,然后创建了对象.它们似乎工作,require()函数返回"1"和var_dump() - 对象返回一个对象.
在此之后,我尝试加载URL,就像在手册中一样,但是无论我尝试了什么URL,我都会遇到致命的错误.错误如下:
Fatal error: Call to undefined function mb_detect_encoding() in
/home/fema/web/subdomain/devel/www_root/parser/
simplehtmldom_1_5/simple_html_dom.php on line 988
Run Code Online (Sandbox Code Playgroud)
我检查了988号线上的内容,它是以下内容:
// Have php try to detect the encoding from the text given to us.
$charset = mb_detect_encoding($this->root->plaintext . "ascii",
$encoding_list = array( "UTF-8", "CP1252" ) );
Run Code Online (Sandbox Code Playgroud)
我知道这是关于字符编码的,但这就是全部.我还没有发现谷歌或SO上的任何相关信息.
我的整个代码是(占位符网址):
<?php
require('simplehtmldom_1_5/simple_html_dom.php');
// Create a DOM object
$dom = new simple_html_dom();
$dom->load_file('http://www.google.com/');
?>
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我该怎么办?或者在发生类似这样的事情时给出某种建议.
提前致谢.
所以我有这个.html文件,我必须分析.在那个文件中我有这样的行:
<tr>
<td colspan=1 rowspan=1 bgcolor=#ffffff align=left valign=top>
<font size=1 face="Tahoma" color=#000000>
<nobr>
240,0000
</nobr>
</font>
</td>
<td colspan=1 rowspan=1 bgcolor=#ffffff align=left valign=top>
<font size=1 face="Tahoma" color=#000000>
<nobr>
340,0000
</nobr>
</font>
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我需要得到的是240,0000,340,0000等等.我尝试过这样的事情:
// Create DOM from URL or file
$html = file_get_html('File.html');
foreach($html->find('td') as $element)
echo $element->text. '<br>';
Run Code Online (Sandbox Code Playgroud)
这样做我没有得到我想要的文本.
如何引用标签内的文字?所以我可以得到价值观.
我正在使用PHP Simple HTML DOM Parser来抓取网店的一些数据(也运行XAMPP 1.7.2和PHP5.3.0),而且我遇到了<tbody>tag的问题.该表的结构是必要的(细节并不是那么重要):
<table>
<thead>
<!--text here-->
</thead>
<tbody>
<!--text here-->
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试<tbody>使用代码进入该部分:
$element = $html->find('tbody',0)->innertext;
Run Code Online (Sandbox Code Playgroud)
它不会抛出任何错误,它只是在我试图回应时没有打印出来.我测试过的其他元素的代码,<thead>,<table>,甚至有点像<span class="price">,他们都做工精细(ofcourse,删除" 0"失败的代码).他们都给出了正确的部分.Outertext同上.但一切都失败了<tbody>.
现在,我已经浏览了Parser,但我不确定我是否能解决它.我注意到<thead>甚至没有提到,但它工作正常.耸
我想我可以尝试做儿童导航,但这似乎也有问题.我刚试过跑:
$el = $html->find('table',0);
$el2 = $el->children(2);
echo $el2->outertext;
Run Code Online (Sandbox Code Playgroud)
而且没有骰子.试图替换children用first_child和2 1,和仍然没有骰子.有趣的是,如果我尝试->find而不是children,它的效果非常好.
我非常有信心我可以找到一个解决方案,但这种行为似乎很奇怪,可以在这里发布.我好奇的心灵很高兴得到所有的帮助.
有这个表我想加载到一个多维数组.问题是由于表具有rowspan值,每行可能具有不同的单元格数.所以我必须删除rowspan并添加空值而不是这些单元格.
这是我有的表(原始文件)(有5k行.)
我必须像这样添加这个表,以便有一个合适的数组.
删除第一行的colspan值很容易.但是在当前方法中删除rowspans有时会导致数组中的额外值.
我目前的PHP文件:
<?php
ini_set('display_errors', true);
ini_set('mbstring.internal_encoding','UTF-8');
ini_set("memory_limit", "1024M");
ini_set('max_execution_time', 300);
include('simple_html_dom.php');
// Create a DOM object
$html = new simple_html_dom();
$html->load_file('stok.html');
$table = array();
$kac = array();
foreach($html->find('tr') as $row) {
$satir = array();
$j = 0;
foreach($row->find('td') as $element) {
if($kac[$j]['deger']>0){
$satir[]='';
$kac[$j]['deger']=$kac[$j]['deger']-1;
$j++;
while($kac[$j]['deger']>0){
$satir[]='';
$kac[$j]['deger']=$kac[$j]['deger']-1;
$j++;
}
}else{
$j++;
if(isset($element->rowspan)){
$kac[$j]['deger']=($element->rowspan)-1;
}
$satir[] = str_replace(' ', '', strip_tags($element->innertext));
}
if(isset($element->colspan)){
$sayi=($element->colspan)-1;
for($i=1;$i<=$sayi;$i++){
$satir[] = '';
}
}
}
$table[] = $satir;
}
echo '<pre>';
print_r($table); …Run Code Online (Sandbox Code Playgroud) 我在我的代码的第71行收到此错误,但是这行的功能正确执行,它完成了我期望它做的事情.
但是,我注意到我的错误日志中充满了这些行:
[2013年12月14日14:54:02 UTC] PHP致命错误:在第71行的/home/sportve/public_html/open_event_common.php中调用非对象的成员函数find()
我检查了什么:
simple_html_dom_parser 已包含,并且第71行打算执行的此功能正在运行.
这是我的代码的第71行:
$content->find('a.openevent', 0)->innertext = '';
Run Code Online (Sandbox Code Playgroud)
所以它的错误导致这个错误出现在我的错误日志文件中?
编辑:这是完整的代码:
<?php
$url = "static/" . $cat_map[$cat]['url'];
$html = file_get_html($url);
$content = $html->find('div#event-pane > div#e' . $event_id, 0);
$content->find('a.openevent', 0)->innertext = '';
$content->find('h3.lshtitle', 0)->onclick = '';
$content->find('h3.lshtitle', 0)->tag = 'div';
$content->find('div.lshtitle', 0)->class = 'ttl';
?>
Run Code Online (Sandbox Code Playgroud) 我在MAMP本地有一个PHP Simple HTML DOM Parser,因为我位于日本,它可以提取信息并与日本版网站很好地配合使用.但是,我想从该网站的英国版本中提取信息.最简单的方法是什么?
我从文档中尝试了以下内容,但它不起作用.
$context = array('http' => array('proxy' => '212.82.126.32:80','request_fulluri' => true,),);
$stream = stream_context_create($context);
$html = file_get_html('http://www.supremenewyork.com/shop/new', false, $stream);
Run Code Online (Sandbox Code Playgroud)
由于网站启用了安全模式,我还尝试了修改后的curl版本.这不起作用.
function curl_exec_follow(/*resource*/ $ch, /*int*/ &$maxredirect = null) {
$mr = $maxredirect === null ? 5 : intval($maxredirect);
if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
} else {
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
if ($mr > 0) {
$newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$rch = curl_copy_handle($ch);
curl_setopt($rch, CURLOPT_HEADER, true);
curl_setopt($rch, …Run Code Online (Sandbox Code Playgroud) 我在这个网站上阅读了20多个相关问题,在谷歌搜索但没有用.我是PHP的新手,我正在使用PHP Simple HTML DOM Parser来获取URL.虽然此脚本适用于本地测试页,但它不适用于我需要脚本的URL.
以下是我为此编写的代码,遵循PHP Simple DOM解析器库附带的示例文件:
<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL');
foreach($html->find('li.name ul#generalListing') as $e)
echo $e->plaintext;
?>
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误消息:
Warning: file_get_contents(http://www.farmersagent.com/Results.aspx?isa=1&name=A&csz=AL) [function.file-get-contents]: failed to open stream: Redirection limit reached, aborting in /home/content/html/website.in/test/simple_html_dom.php on line 70
Run Code Online (Sandbox Code Playgroud)
请指导我应该做些什么来使它工作.我是新人,所以请提出一个简单的方法.在阅读本网站上的其他问题及其答案时,我尝试使用cURL方法创建句柄,但是我没能使它工作.我尝试的cURL方法不断返回"资源"或"对象".我不知道如何将它传递给Simple HTML DOM Parser以使$ html-> find()正常工作.
请帮忙!谢谢!
我需要从这个网站抓取产品数据,但是当你登录时价格是不同的。因此,我需要提交这个登录表单(通过 php),然后使用Simple HTML DOM Parser来抓取产品数据。
但是,没有任何答案允许我在登录以下站点时登录并继续抓取:https : //www.bestlinknetware.com/Account/LogOn
尝试 #1
$data = http_build_query(array(
"UserName" => "ourValidUsername",
"Password" => "ourValidPassword"
));
send_message("<p>" . $data . "</p>");
$request = array(
"http" => array(
"header" => "Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: " . strlen($data) . "\r\n". …Run Code Online (Sandbox Code Playgroud) 我在php中编写了一个脚本,用于搜索title位于网页右上角的产品.该title是可见的Gucci.
当我执行下面的脚本时,它给了我一个错误Notice: Trying to get property 'plaintext' of non-object in C:\xampp\htdocs\runcode\testfile.php on line 16.
我怎样才能Gucci从该网页获得该名称?
我到目前为止写的:
<?php
include "simple_html_dom.php";
$link = "https://www.farfetch.com//bd/shopping/men/gucci-rhyton-web-print-leather-sneaker-item-12964878.aspx";
function get_content($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: Mozilla/5.0',));
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$htmlContent = curl_exec($ch);
curl_close($ch);
$dom = new simple_html_dom();
$dom->load($htmlContent);
$itemTitle = $dom->find('#bannerComponents-Container [itemprop="name"]', 0)->plaintext;
echo "{$itemTitle}";
}
get_content($link);
?>
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我在剧本中使用的选择器完美无瑕.
为了清除这种混淆,我从页面源复制了一大块html元素,既没有动态生成也没有javascript加密,所以我没有找到任何理由让curl无法处理:
<div class="cdb2b6" id="bannerComponents-Container">
<p class="_41db0e …Run Code Online (Sandbox Code Playgroud) php ×10
simple-html-dom ×10
curl ×4
html-parsing ×2
dom ×1
fatal-error ×1
html-table ×1
java ×1
jsoup ×1
proxy ×1
proxylocal ×1
redirect ×1
web-scraping ×1