簡體   English   中英

cheerio 有時會返回空字符串

[英]cheerio sometimes returns empty string

我正在抓取 Genius.com 的歌詞; 我用谷歌搜索,似乎找不到我的代碼無法正常工作的原因。 我正在從 Genius.org 頁面上的 div 中抓取文本(即https://genius.com/Britney-spears-baby-one-more-time-lyrics )。

查看頁面源代碼,似乎 div 存在並且在源代碼中填充了文本,而不是由 Javascript 或其他方式填充(如果是的話,在這種情況下,cheerio 不會在百分之零的時間內工作嗎?)當我運行我的代碼時,它有 50% 的時間有效; 其他時候它返回一個空的。

我看到了這個,但這似乎是一個 hack-ey 解決方案,我真的不明白為什么我的 async/await 不能為 phin 的完整響應工作......

這是有問題的代碼

const scraperRouter = require('express').Router()
const p = require('phin')
const cheerio = require('cheerio')

scraperRouter.get('/', async (req, res) => {
    
        const url = req.header('geniusUrl')
    
        const _res = await p(url)
        
        try {
            let $ = cheerio.load(_res.body)
            const lyrics = $('.lyrics').text()
    
            res.send(lyrics)
        }
        catch (e) {
            console.log(e)
            res.json(e)
        }
    })

任何建議表示贊賞。 謝謝。

在 OP 確認為解決方案后將我的評論轉換為答案:

有時,當網站進行 A/B 測試時會發生這種情況。 他們可能會將您重定向到幾個 DOM 之一。 也可能存在地區差異。 我建議嘗試從幾個不同的 IP、瀏覽器、區域等訪問它,以嘗試找出是否存在模式。 如果您可以將范圍縮小到幾個不同的 DOM,那么您可以有條件地嘗試兩者。

這也可能由於速率限制而發生。

暫無
暫無

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

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