Xpath 不返回图像源

  • 本文关键字:图像 返回 Xpath php xml
  • 更新时间 :
  • 英文 :


我是网络抓取的新手,我正在尝试一次抓取一些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...

这里没有tbodyclass不仅包含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');

最新更新