猿问

如何使用网络抓取获取推文的内容

我尝试过使用 puppeteer,但是我会尝试通过传入 x-path 来获取信息,它永远不会返回任何信息。完全相同的程序适用于不同的网站,但不适用于 Twitter。有没有办法使用 Cheerio 或其他方法获取推文的内容?我可以访问 twitter API,但是文档很难理解。


编辑代码:这是我的 pupputeer 代码,它出于某种原因挂在 await page.waitfornavigation() 仅用于 twitter。对于任何其他网站,这都有效。


const Apify = require('apify');

 

var OldAlphaAIData = {TICKER:"", REF:"", SIGNAL:""} 

Apify.main(async () => {

    const input = await Apify.getValue('INPUT');

 

    const browser = await Apify.launchPuppeteer();

    const page = await browser.newPage();

    await page.goto('https://twitter.com/MarketsTicker');

    await page.waitForNavigation();

    do

    {

        console.log('ffff');

        var timenow = new Date(); //Get Date

        timenow.setHours(timenow.getHours() + 1);

        var AlphaAIData = {TICKER:"", REF:"", SIGNAL:""};

        var everything;

        var everythingarray = [];

 

        //xpath to 1st twitter message      

        const [el0] = await page.$x('/html/body/div/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div/div[2]/section/div/div/div/div[1]');    

        const txt0 = await el0.getProperty('textContent');

        everything = await txt0.jsonValue();

        console.log(everything);

    }while(true);

});


萧十郎
浏览 128回答 1
1回答

米脂

不确定您尝试从每条推文中提取的确切内容以及您如何解决问题,但twitter 模块的文档非常简单,假设您正在使用基于问题标签的节点。var Twitter = require('twitter'); var client = new Twitter({  consumer_key: '',  consumer_secret: '',  access_token_key: '',  access_token_secret: ''}); var params = {screen_name: 'nodejs'};client.get('statuses/user_timeline', params, function(error, tweets, response) {  if (!error) {    console.log(tweets);  }});当然,要实现这一点,您需要注册访问 API 并使用适当的变量(如 consumer_key、consumer_secret 等)提供这些详细信息。更新:我已经设法让您的代码在 twitter 上运行,请查看以下更改,最重要的是await page.waitForXPath(xpath);,它在尝试获取其内容之前等待 xpath 首先加载。xpath 也不同,我在 DOM 内部进一步指出了保存消息的跨度。const Apify = require('apify');var OldAlphaAIData = { TICKER: "", REF: "", SIGNAL: "" }Apify.main(async () => {    const input = await Apify.getValue('INPUT');    const browser = await Apify.launchPuppeteer();    const page = await browser.newPage();    const navigationPromise = page.waitForNavigation();    await page.goto('https://twitter.com/MarketsTicker')    await navigationPromise    console.log('ffff');    var timenow = new Date(); //Get Date    timenow.setHours(timenow.getHours() + 1);    var AlphaAIData = { TICKER: "", REF: "", SIGNAL: "" };    var everything;    var everythingarray = [];    //xpath to 1st twitter message          const xpath = '/html/body/div/div/div/div[2]/main/div/div/div/div/div/div/div/div/div[2]/section/div/div/div/div[1]/div/div/article/div/div/div/div[2]/div[2]/div[2]/div[1]/div/span';    await page.waitForXPath(xpath);    const [el0] = await page.$x(xpath);    const txt0 = await el0.getProperty('textContent');    everything = await txt0.jsonValue();    console.log(everything);});为简单起见,我删除了无限循环,因为它无限期地打印第一条推文。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答