javascript - 从具有相同类名的多个表格单元格中读取文本
问题描述
我需要从网站上抓取特定信息。列出了不同的人,并且 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,请告诉我。
解决方案
你得到的原因是,对于它试图找到 undefined
的每张桌子,. 您需要做的是检查这些元素是否存在于表数据中,就像这样。td
.novip-firmen-name
etc
$('table .novip').each(function(){
if($(this).find('.novip-firmen-name').length !== 0) {
console.log($(this).find('.novip-firmen-name').text());
console.log($(this).find('.novip-firmen-name').attr('href'));
}
if($(this).find('.novip-left-titel').length !== 0){
console.log($(this).find('.novip-left-titel').text());
}
if($(this).find('.novip-left-fachbezeichnung').length !== 0){
console.log($(this).find('.novip-left-fachbezeichnung').text());
}
console.log('----------------------------------');
});
推荐阅读
- javascript - Angular 错误不允许我在 Firebase Storage 中更新和上传图片,原因是找不到存储桶
- c - C中的这些语句有什么区别?
- elasticsearch - 如何让 elasticsearch 为匹配顺序的标记字符串分配更高的分数?
- reactjs - 来自 API 的 React Native 本地图像路径
- mysql - 将 MySQL 列的结果集设置为列值
- javascript - 轴 #0 的数据列不能是带有谷歌图表的字符串类型
- perl - 如何在不破坏页面其余部分的情况下将包含表情符号的推文添加到我的页面?
- python - 将多个字典转换为 csv 表的最快方法
- python - “WHERE”附近的Django sqlite3 OperationalError:语法错误
- iterm2 - iTerm2 Python API 拆分选项卡