如何在 Cheerio 中执行索引以进行网页抓取
How to perform indexing in Cheerio for web scraping
我正在使用 Cheerio 进行网络抓取,我之前使用过 bs4。
我想抓取 https://rera.kerala.gov.in/rera_project_details 这个网站;在 Python 中抓取 table 我们可以使用 findall("tr")[0] 获取第一个 <tr>
.
但是如何在 Cheerio 中执行相同的操作?
下面是我的代码:
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
const url = "https://rera.kerala.gov.in/rera_project_details";
const arr = [];
request({method:"GET",url}, function(err, res, body){
if (res.statusCode==200){
let $ = cheerio.load(body);
const getID = $("#block-zircon-content");
const tbody = getID.find('tbody');
tbody.each((i, el)=>{
const ff = $(el).find("tr");
console.log(ff.html());//it returns first tr
//how to get 2 tr so that i can get td of second tr and can inde on td also
})
}}
)
如果我遍历它 returns 所有 tr ,现在如何在每个 td 上建立索引以便在 table 的最后一列中我可以获得 link 来获取 pdf?
编辑
我已经到了这里,但是如何获取 tr 中的 td 元素列表:
const getID = $(".views-table");
const getBody = getID.find("tbody");
const gettr = getBody.find("tr");
const getfirsttr = $.html(gettr[0]);//it gives me first tr
const getfirsttd = getfirsttr.find("td")//does not work
您应该能够使用一个选择器,它会为您提供所需 table 中的所有元素。拥有元素后,您可以访问它们的属性、子元素等。
const url = "https://rera.kerala.gov.in/rera_project_details";
request({method:"GET",url}, function(err, res, body) {
if (res.statusCode==200) {
let $ = cheerio.load(body);
// Get all td elements from the table.
let tdElements = $("#block-zircon-content tbody tr td").map((i, el)=>{
return el;
}).toArray();
console.log(`<td> list: Found ${tdElements.length} elements..`);
console.log("tdElements[0]:", tdElements[0]);
console.log("tdElements[0]: (html)", $.html(tdElements[0]))
}}
);
要使用 .find() 简单地找到 table 中的所有 td 元素,我们可以尝试:
const trElements = $("#block-zircon-content tbody").find("tr");
const tdElements = trElements.find("td").toArray();
console.log(`first td:`, tdElements[0]);
好的,在进行研究和特里的上述帮助后,我已经了解它是如何工作的..
所有 cheerio 函数都适用于选择器 html 而不是文本..
下面是我的代码,以防像我这样的其他初学者在使用 cheerio 时卡住
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
// const { get } = require('request');
// const { EACCES } = require('constants');
const url = "https://rera.kerala.gov.in/rera_project_details";
const arr = [];
request({method:"GET",url}, function(err, res, body){
if (res.statusCode==200){
let $ = cheerio.load(body);
// this is a selector
const getID = $(".views-table");
const getBody = getID.find("tbody");
const gettr = getBody.find("tr");
gettr.each((index, element)=>{
// if i use normal element it will be treated as normal text but children are avaiable
//ON SELECTORS WE CAN APPLY ALL FUNCTIONS
var std = $(element).find("td")
let number = $(std[0]).contents().text();
let ReraNumbers = $(std[1]).contents().text();
let name = $(std[2]).contents().text().trim()
// difference between tohtml and html is $.html retunr html tag
// to html returns html content
})
// const tdElements= gettr.find("td").toArray();
// console.log(tdElements[2].children[0].data.trim())
// let tdElements = $("#block-zircon-content tbody tr td").map((i, el)=>{
// return el;
// }).toArray();
// console.log(`<td> list: Found ${tdElements.length} elements..`);
// console.log("tdElements[0]:", tdElements[0]);
// console.log("tdElements[0]: (html)", $.html(tdElements[0]))
}}
)
回答索引问题:
$('tr').eq(n)
会给你第 n 个 tr 作为 cheerio 对象。和
$('tr')[n]
将其作为 parse5 对象提供
我正在使用 Cheerio 进行网络抓取,我之前使用过 bs4。
我想抓取 https://rera.kerala.gov.in/rera_project_details 这个网站;在 Python 中抓取 table 我们可以使用 findall("tr")[0] 获取第一个 <tr>
.
但是如何在 Cheerio 中执行相同的操作?
下面是我的代码:
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
const url = "https://rera.kerala.gov.in/rera_project_details";
const arr = [];
request({method:"GET",url}, function(err, res, body){
if (res.statusCode==200){
let $ = cheerio.load(body);
const getID = $("#block-zircon-content");
const tbody = getID.find('tbody');
tbody.each((i, el)=>{
const ff = $(el).find("tr");
console.log(ff.html());//it returns first tr
//how to get 2 tr so that i can get td of second tr and can inde on td also
})
}}
)
如果我遍历它 returns 所有 tr ,现在如何在每个 td 上建立索引以便在 table 的最后一列中我可以获得 link 来获取 pdf?
编辑
我已经到了这里,但是如何获取 tr 中的 td 元素列表:
const getID = $(".views-table");
const getBody = getID.find("tbody");
const gettr = getBody.find("tr");
const getfirsttr = $.html(gettr[0]);//it gives me first tr
const getfirsttd = getfirsttr.find("td")//does not work
您应该能够使用一个选择器,它会为您提供所需 table 中的所有元素。拥有元素后,您可以访问它们的属性、子元素等。
const url = "https://rera.kerala.gov.in/rera_project_details";
request({method:"GET",url}, function(err, res, body) {
if (res.statusCode==200) {
let $ = cheerio.load(body);
// Get all td elements from the table.
let tdElements = $("#block-zircon-content tbody tr td").map((i, el)=>{
return el;
}).toArray();
console.log(`<td> list: Found ${tdElements.length} elements..`);
console.log("tdElements[0]:", tdElements[0]);
console.log("tdElements[0]: (html)", $.html(tdElements[0]))
}}
);
要使用 .find() 简单地找到 table 中的所有 td 元素,我们可以尝试:
const trElements = $("#block-zircon-content tbody").find("tr");
const tdElements = trElements.find("td").toArray();
console.log(`first td:`, tdElements[0]);
好的,在进行研究和特里的上述帮助后,我已经了解它是如何工作的.. 所有 cheerio 函数都适用于选择器 html 而不是文本..
下面是我的代码,以防像我这样的其他初学者在使用 cheerio 时卡住
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
// const { get } = require('request');
// const { EACCES } = require('constants');
const url = "https://rera.kerala.gov.in/rera_project_details";
const arr = [];
request({method:"GET",url}, function(err, res, body){
if (res.statusCode==200){
let $ = cheerio.load(body);
// this is a selector
const getID = $(".views-table");
const getBody = getID.find("tbody");
const gettr = getBody.find("tr");
gettr.each((index, element)=>{
// if i use normal element it will be treated as normal text but children are avaiable
//ON SELECTORS WE CAN APPLY ALL FUNCTIONS
var std = $(element).find("td")
let number = $(std[0]).contents().text();
let ReraNumbers = $(std[1]).contents().text();
let name = $(std[2]).contents().text().trim()
// difference between tohtml and html is $.html retunr html tag
// to html returns html content
})
// const tdElements= gettr.find("td").toArray();
// console.log(tdElements[2].children[0].data.trim())
// let tdElements = $("#block-zircon-content tbody tr td").map((i, el)=>{
// return el;
// }).toArray();
// console.log(`<td> list: Found ${tdElements.length} elements..`);
// console.log("tdElements[0]:", tdElements[0]);
// console.log("tdElements[0]: (html)", $.html(tdElements[0]))
}}
)
回答索引问题:
$('tr').eq(n)
会给你第 n 个 tr 作为 cheerio 对象。和
$('tr')[n]
将其作为 parse5 对象提供