簡體   English   中英

如何在 Cheerio 中為 web 抓取執行索引

[英]How to perform indexing in Cheerio for web scraping

我正在使用 Cheerio 進行 web 抓取,我之前使用過 bs4。

我想刮https://rera.kerala.gov.in/rera_project_details這個網站; 在 Python 中,我們可以使用 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
    })
    

}}
)

如果我循環遍歷它返回所有 tr,那么現在如何在每個 td 上建立索引,以便在表的最后一列中我可以獲得獲取 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

您應該能夠使用一個選擇器,該選擇器將為您提供所需表中的所有元素。 一旦你有了元素,你就可以訪問它們的屬性、子元素等。

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() 簡單地查找表中的所有 td 元素,我們可以嘗試:

const trElements = $("#block-zircon-content tbody").find("tr");
const tdElements = trElements.find("td").toArray();
console.log(`first td:`, tdElements[0]);

要回答索引問題:

$('tr').eq(n)

會給你第n個tr作為cheerio object。

$('tr')[n]

將其作為 parse5 object

好吧,在做了研究和特里的幫助之后,我明白了它是如何工作的..所有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]))


}}
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM