我正在尝试在标签内抓取一些日期,但我不想获取标签内的链接。
由于标签没有ID或类,因此不太确定如何解决该问题
<div id="list-section">
<ul>
<li data-store-id="1234">
<div class="item">
<p>
<strong>
<a target="_blank" href="www.somelink.com"> NAME ONE </a>
</strong>
</p>
</div>
</li>
<li data-store-id="1234">
<div class="item">
<p>
<strong>
<a target="_blank" href="www.somelink.com"> NAME TWO </a>
</strong>
</p>
</div>
</li>
</ul>
</div>
我正在尝试将数组中的每个名称都放在[NAME ONE,NAME TWO]等末尾。
编辑:将节点与木偶一起使用
答案 0 :(得分:2)
有一种方法可以找到名为xpath的Web报废时非常有用的元素。从未与puppeteer一起工作,但是最近我与selenium一起工作了很多,而我经常使用xpath。
快速浏览puppeteer的文档,我发现了一些可能对您有用的东西。
https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagexexpression
由于我没有完整的html页面,因此我可以制作一个简单的xPath来演示其功能。
//div[@class='item']//a
您还可以测试xpath,在“ Elements”标签中打开Google Chrome DevTools,然后按CTRL + F
这是用于抓取网页的好工具。
答案 1 :(得分:1)
您可以通过两个步骤将名称包含在数组中:
<a>...</a>
正如道格拉斯之前提到的,您可以使用XPath,但是在这种情况下,简单的CSS选择器就可以完成工作。作为CSS选择器,许多组合都可以为您提供定位标记:#list-section a
,ul a
...
选择最适合您并且以后刹车的可能性最小的那个。 我建议使用第一个:
const anchorTags = await page.$$("#list-section a")
关于获取元素的内部HTML,此SO question绝对会为您提供帮助。我的首选方法是定义一个单独的异步函数,如下所示:
async function getInnerHtml(page, target){
const innerHTML = await page.evaluate(el => el.innerHTML, target)
return innerHTML
}
这样,您将在数组上循环并在锚标记上调用它。
不要忘记,总是有很多方法可以构建刮板。在我看来,您过多地专注于该元素,并希望精确选择。 另外,有必要掌握CSS选择器,尤其是CSS combbinators。
欢呼