[英]extract URLs from href inside unordered lists and insert into mysql with PHP
我有几个无序列表。 列表项是URL。 如何从每个列表项中提取URL和链接文本以插入数据库?
<ul id="1">
<li><a href="someplace.com">Text</a></li>
<li><a href="someplace.com">Text</a></li>
<li><a href="someplace.com">Text</a></li>
</ul>
<ul id="2">
<li><a href="someplace.com">Text</a></li>
<li><a href="someplace.com">Text</a></li>
<li><a href="someplace.com">Text</a></li>
</ul>
<ul id="3">
<li><a href="someplace.com">Text</a></li>
<li><a href="someplace.com">Text</a></li>
<li><a href="someplace.com">Text</a></li>
</ul>
我知道RegEx应该避免。 我已经设置了PDO。 ul id号进入mysql表的categoryID。
唯一似乎有意义的事情就像是一个while循环,内部有另一个循环来获取URL和文本,然后在增加id之后。 我只是不知道如何开始它。 URL和文本应该进入数组吗?
假设您的HTML存储在字符串$content
,您可以使用PHP DOM提取各种列表项而无需使用正则表达式。
$dom = DOMDocument::loadHTML($content);
$lists = $dom->getElementsByTagName('ul');
foreach($lists as $list) {
$id = $list->getAttribute('id');
$links = $list->getElementsByTagName('a');
foreach ($links as $link) {
$href = $link->getAttribute('href');
$text = $link->nodeValue;
// insert $id, $text and $href into the data here
}
}
你可以正常使用正则表达式:
preg_match_all('/<a href=\"(.*?)\"[.*]?>(.*?)<\/a>/i', $string, $matches);
$insert = array();
foreach($matches as $val)
{
/* DONT FORGET TO ESCAPE YOUR DATA IF NEEDED */
$url = $val[0];
$name = $val[1];
$insert[] = 'INSERT INTO tableName (url, name) VALUES ("' . $url . '", "' . $name . '")';
}
print_r($insert);
我建议你尝试使用SimpleHTMLDom
,它是一个用于处理xml文件的PHP库。
你很容易就这样:
require_once("/path/to/simplehtmldom/library");
$parsed_data = array();
//we next need to create a dom object --
//case 1: let me assume the HTML is in a string
$dom_object = str_get_html($html_string);
//case 2: it's at a particular url
$dom_object = file_get_html("http://www.site-with-the-content.com");
//now we have our object
$links = $dom_object->find("ul li a");
//finds all the <a> tags on the page inside <ul>, you could filter it
//using class or ids like with jQuery if you like
foreach($links as $link){
$parsed_data[] = array(
"link"=>$link->href,
"text"=>$link->innertext
);
}
//You can now go through your array of parsed content and insert into your DB
希望这有帮助:)
这是jQuery
版本,如果您在将它们发送到浏览器后尝试获取它们,则可以提取所需的值
var data=$("ul");
var values=new Array();
$.each(data,function(i){
values[i]=$(this).attr("id");
$.each($(this).find("li"),function(j){
values[i+"-"+j+"link"]=$(this).find("a").attr("href")
values[i+"-"+j+"text"]=$(this).find("a").text();
});
});
console.log(values)
现在通过ajax
调用将此数组发送到您的php文件
希望它有意义
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.