【发布时间】:2018-09-03 16:25:31
【问题描述】:
我需要从网站中抓取特定信息。列出了不同的人,1 人的 html 看起来像这样:
<table class="novip">
<tbody><tr class="novip">
<td class="novip-portrait-picture" rowspan="5">
<a class="novip-portrait-picture" href="###">
<img class="novip-portrait-picture" src="/img/general/default/portrait/cat/default-portrait_m.jpg" alt="Noch kein Bild" onerror="portrait_m_image_failover(this)">
</a>
</td>
<td class="novip-left">
<a class="novip-firmen-name" href="###" target="_top">
Dubler Martin
</a>
</td>
<td class="novip-right" rowspan="2">
<a class="novip" href="/arzt/dubler-martin-bad-zurzach-5330-arzt.html">
<img class="novip-right" src="/pictures/31814/web/small/31814.png">
</a>
</td>
</tr>
<tr class="novip">
<td class="novip-left">
<span class="novip-left-titel">
Dr. med.
</span>
<span class="novip-left-fachbezeichnung">
Facharzt FMH für Allgemeinmedizin, Reiseme
<a class="novip-left-fachbezeichnung" href="/arzt/dubler-martin-bad-zurzach-5330-arzt.html">
...
</a>
</span>
<br>
address...
<br>
Tel: 056 249 27 77
</td></tr>
</tbody></table>
我需要 novip-firmen-name、novip-left-titel 和 novip-left-fachbezeichnung 类中的文本。
我尝试了以下方法:
request('url', (error, response, html)=>{
if(!error && response.statusCode == 200){
const $ = cheerio.load(html);
$('table .novip').each(function(i, value){
var fullname = $(value).find('.novip-firmen-name').text();
console.log(fullname);
var link = $(value).find('.novip-firmen-name').attr('href');
console.log(link);
var title = $(value).find('.novip-left-titel').text();
console.log(title);
var fachbezeichnung = $(value).find('.novip-left-fachbezeichnung').text();
console.log(fachbezeichnung);
console.log('----------------------------------');
});
}
else console.log("error");
});
它似乎工作正常,但有时由于某种原因它记录未定义。此外,我觉得有一种更简单的方法可以获取上面列出的信息。我以前从未使用过 js 和 Cheerio,因此感谢您提供任何帮助。谢谢
PS:如果您需要网站链接或更多html,请告诉我。
【问题讨论】:
-
如果“.novip-firmen-name”类每个表来一次,您可以直接获取具有类名的元素。而不是每次都使用 find ,只需将引用保留在变量中 1 次并使用它。
标签: javascript node.js web-scraping cheerio