我是网络抓取的新手,我正在尝试一次抓取一些URL,我已经创建了一个包含所有URL的数组,并且我正在使用for循环来获取每个URL。
$urls = [
"https://escapefromtarkov.gamepedia.com/Weapons",
"https://escapefromtarkov.gamepedia.com/Headwear",
"https://escapefromtarkov.gamepedia.com/Face_cover",
"https://escapefromtarkov.gamepedia.com/Eyewear",
"https://escapefromtarkov.gamepedia.com/Earpieces",
"https://escapefromtarkov.gamepedia.com/Chest_rigs",
"https://escapefromtarkov.gamepedia.com/Body_armor",
"https://escapefromtarkov.gamepedia.com/Backpacks",
"https://escapefromtarkov.gamepedia.com/Pouches",
"https://escapefromtarkov.gamepedia.com/Armbands",
"https://escapefromtarkov.gamepedia.com/Ammunition",
"https://escapefromtarkov.gamepedia.com/Weapon_mods",
"https://escapefromtarkov.gamepedia.com/Meds",
"https://escapefromtarkov.gamepedia.com/Consumables",
"https://escapefromtarkov.gamepedia.com/Loot",
"https://escapefromtarkov.gamepedia.com/Keys_%26_Intel",
"https://escapefromtarkov.gamepedia.com/Containers"
];
for($i = 0; $i < count($urls); $i++)
{
$html = file_get_contents($urls[$i]);
$wiki_doc = new DOMDocument();
libxml_use_internal_errors(TRUE);
$wiki_doc->loadHTML($html);
libxml_clear_errors();
$wiki_xpath = new DOMXPath($wiki_doc);
$wiki_row = $wiki_xpath->query('//table[@class="wikitable"]/tbody/tr/td/a/img/@src');
foreach($wiki_row as $row)
{
$row->nodeValue;
}
}
我希望使用一类"wikitable"获取表中每个图像的图像 src,但是当我运行它时,我没有得到任何结果。
tbody
元素由浏览器添加。开发人员工具 DOM 视图显示页面的清理/修复/统一 HTML DOM。看看实际来源。
<table class="wikitable sortable">
<tr>
<th>Name
</th>
<th>Image
</th>
<th>Cartridge
</th>
<th>Description
</th></tr>
<tr>
<td><a href="/AK-101" class="mw-redirect" title="AK-101">AK-101</a>
</td>
<td><a href="/AK-101" title="AK-101"><img alt="AK101 Image.png" src="https://d1u5p3...
这里没有tbody
,class
不仅包含wikitable
.这可以在 Xpath 1.0 中匹配,但它需要一点字符串魔法:
//table[contains(concat(' ', normalize-space(@class), ' '), ' wikitable ')]/tr/td/a/img/@src
XPath 有几个问题,首先是使用 @class="wikitable"
意味着如果元素中有其他类,这将不起作用。 相反,您应该说该类是否包含您之后的类。 第二个是原始文档中没有<tbody>
元素。 所以 XPath 行应该是
$wiki_row = $wiki_xpath->query('//table[contains(@class,"wikitable")]/tr/td/a/img/@src');