我是Web抓取的新手,我想一次抓取几个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,但是,当我运行此程序时,没有任何结果。
答案 0 :(得分:1)
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
答案 1 :(得分:0)
XPath存在两个问题,第一个问题是使用@class="wikitable"
意味着如果元素中还有其他类,则此操作将无效。您应该改为说该课程是否包含您的课程。第二个是原始文档中没有<tbody>
元素。所以XPath行应该是
$wiki_row = $wiki_xpath->query('//table[contains(@class,"wikitable")]/tr/td/a/img/@src');