如何解析HTML/XML并从中提取信息?
我正在尝试<input>
使用此模式匹配类型"隐藏"字段:
/<input type="hidden" name="([^"]*?)" value="([^"]*?)" />/
Run Code Online (Sandbox Code Playgroud)
这是示例表单数据:
<input type="hidden" name="SaveRequired" value="False" /><input type="hidden" name="__VIEWSTATE1" value="1H4sIAAtzrkX7QfL5VEGj6nGi+nP" /><input type="hidden" name="__VIEWSTATE2" value="0351118MK" /><input type="hidden" name="__VIEWSTATE3" value="ZVVV91yjY" /><input type="hidden" name="__VIEWSTATE0" value="3" /><input type="hidden" name="__VIEWSTATE" value="" /><input type="hidden" name="__VIEWSTATE" value="" />
Run Code Online (Sandbox Code Playgroud)
但我不知道的type
,name
和value
属性将始终出现在相同的顺序.如果type
属性是最后一个,则匹配将失败,因为在我的模式中,它在开始时.
问题:
如何更改模式以使其匹配,无论<input>
标签中属性的位置如何?
PS:顺便说一下,我正在使用基于Adobe Air的RegEx桌面工具来测试正则表达式.
我有一个包含大量链接的网页.我想编写一个脚本,将脚本中包含的所有数据转储到本地文件中.
有人用PHP做过吗?一般准则和陷阱就足以作为答案.
我刚刚开始阅读有关DOM的文档和示例,以便抓取和解析文档.
例如,我有部分文件如下所示:
<div id="showContent">
<table>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td width="172" valign="top"><a href="link"><img height="91" border="0" width="172" class="" src="img"></a></td>
<td width="10"> </td>
<td valign="top"><table cellspacing="0" cellpadding="0" border="0">
<tbody><tr>
<td height="30"><a class="px11" href="link">title</a><a><br>
<span class="px10"></span>
</a></td>
</tr>
<tr>
<td><img height="1" width="580" src="crap"></td>
</tr>
<tr>
<td align="right">
<a href="link"><img height="16" border="0" width="65" src="/buy"></a>
</td>
</tr>
<tr>
<td valign="top" class="px10">
<p style="width: 500px;">description.</p>
</td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
<tr>
<td>
Crap
</td>
</tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用以下代码来获取所有tr
标记并分析其中是否存在垃圾或信息:
$dom …
Run Code Online (Sandbox Code Playgroud) 我正在尝试替换字符串中的视频链接 - 这是我的代码:
$doc = new DOMDocument();
$doc->loadHTML($content);
foreach ($doc->getElementsByTagName("a") as $link)
{
$url = $link->getAttribute("href");
if(strpos($url, ".flv"))
{
echo $link->outerHTML();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,outerHTML
当我试图获取完整超链接的html代码时不起作用<a href='http://www.myurl.com/video.flv'></a>
任何想法如何实现这一目标?
我需要一个正则表达式,它会给我一个href标签内部的字符串和引号内部.
例如,我需要在以下内容中提取theurltoget.com:
<a href="theurltoget.com">URL</a>
Run Code Online (Sandbox Code Playgroud)
另外,我只想要基本网址部分.即http://www.mydomain.com/page.html
我只想要http://www.mydomain.com/
我正在尝试使用正则表达式替换PHP中的源属性(可能是图像或任何标记).
我有一个像这样的字符串:
$string2 = "<html><body><img src = 'images/test.jpg' /><img src = 'http://test.com/images/test3.jpg'/><video controls="controls" src='../videos/movie.ogg'></video></body></html>";
Run Code Online (Sandbox Code Playgroud)
我想把它变成:
$string2 = "<html><body><img src = 'test.jpg' /><img src = 'test3.jpg'/><video controls="controls" src='movie.ogg'></video></body></html>";
Run Code Online (Sandbox Code Playgroud)
继承人我试过的:
$string2 = preg_replace("/src=["']([/])(.*)?["'] /", "'src=' . convert_url('$1') . ')'" , $string2);
echo htmlentities ($string2);
Run Code Online (Sandbox Code Playgroud)
基本上它没有改变任何东西,并给了我一个关于未转义字符串的警告.
不$1
发送字符串的内容?这有什么不对?
而convert_url的功能来自我之前发布的一个例子:
function convert_url($url)
{
if (preg_match('#^https?://#', $url)) {
$url = parse_url($url, PHP_URL_PATH);
}
return basename($url);
}
Run Code Online (Sandbox Code Playgroud)
它应该删除url路径并返回文件名.
我有一个HTML字符串,我想检查它是否有任何内部链接,如果是这样,提取它们并将它们放在一个数组中.我可以使用其选择器的简单性在jQuery中执行此操作,但我找不到在PHP中使用的正确方法.
例如,字符串可能如下所示:
<h1>Doctors</h1>
<a title="C - G" href="linkl.html">C - G</a>
<a title="G - K" href="link2.html">G - K</a>
<a title="K - M" href="link3.html">K - M</a>
Run Code Online (Sandbox Code Playgroud)
如何(在PHP中)我可以把它变成一个看起来像这样的数组:
[1]=>"link1.html"
[2]=>"link2.html"
[3]=>"link3.html"
Run Code Online (Sandbox Code Playgroud)
谢谢,伊恩
只是想知道是否有人可以通过以下方式进一步帮助我.我想解析这个网站上的URL:http://www.directorycritic.com/free-directory-list.html?pg = 1&sort = pr
我有以下代码:
<?PHP
$url = "http://www.directorycritic.com/free-directory-list.html?pg=1&sort=pr";
$input = @file_get_contents($url) or die("Could not access file: $url");
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $input, $matches)) {
// $matches[2] = array of link addresses
// $matches[3] = array of link text - including HTML code
}
?>
Run Code Online (Sandbox Code Playgroud)
目前没有做什么,我需要做的是废弃所有16页的表中的所有URL,并且非常感谢一些帮助,如何修改上述内容并将URL输出到文本文件中.
我正在尝试使用PHP Simple HTML DOM Parser来获取外部文件的HTML.该文件包含一个表,目标是找到具有特定数据内容的能力单元格,然后获取下一个兄弟单元格的数据.这些数据需要放在PHP变量中.
基于如何使用PHP解析和处理HTML/XML等文章中的研究和信息?,抓取A元素的href属性,刮擦数据:PHP简单的HTML DOM解析器,当然还有PHP Simple HTML DOM Parser Manual我已经能够产生一些结果,但我担心我可能走错了路.
表格行如下所示:
<tr>
<td>fluff</td>
<td>irrelevant</td>
<td>etc</td>
<td><a href="one">Hello world</a></td>
<td>123.456</td>
<td>fluff</td>
<td>irrelevant</td>
<td>etc</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
我想要完成的是找到包含"Hello world"的表格单元格,然后从下一个td单元格中获取数字.下面的代码找到了表格单元格并回显了它的内容,但我尝试将它用作地标以获取下一个单元格的数据失败了......
$html = file_get_html("http://site.com/stuff.htm");
$e = $html->find('td',0)->innertext = 'Hello world';
echo $e;
Run Code Online (Sandbox Code Playgroud)
所以最终,在上面的例子中,123.456的值需要以某种方式进入PHP变量.
谢谢你的帮助!
php ×9
html-parsing ×5
html ×3
parsing ×3
regex ×3
dom ×2
xml-parsing ×2
domdocument ×1
extract ×1
href ×1
outerhtml ×1
string ×1
web-crawler ×1
xml ×1