本文最后更新于 318 天前,其中的信息可能已经有所发展或是发生改变。
最近遇到这样的需求,爬虫爬某些网页,返回html的form代码并自动提交,而且form的action、数据的name value都是不固定的,因此需要解析HTML代码,并将其转换成一种通用的格式。
输入:
<form action="/api/xxx" method="POST">
<input type="hidden" name="aaa" value="bbb"/>
<input type="hidden" name="ccc" value="ddd"/>
</form>
输出:
{
"action": "/api/xxx",
"method": "POST",
"data": {
"aaa": "bbb",
"ccc": "ddd"
}
}
使用ChatGPT辅助后,我们很快得到了以下代码。(经过本人修改后)
function form2json($html) {
$doc = new DOMDocument();
$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES','UTF-8'));
// $doc->loadHTML($html);
$forms = $doc->getElementsByTagName('form');
if($forms->length > 0) {
$form = $forms->item(0);
$formInfo = [
'action' => $form->getAttribute('action'),
'method' => $form->getAttribute('method'),
'data' => []
];
$inputs = $form->getElementsByTagName('input');
foreach($inputs as $input) if($input->getAttribute('name')) $formInfo['data'][$input->getAttribute('name')] = $input->getAttribute('value');
return $formInfo;
}
return false;
}