如何使用JQuery获取标记名为“”的元素< ht:picture_source>?

bq3bfh9z  于 2022-11-22  发布在  jQuery
关注(0)|答案(2)|浏览(107)

我 试 着 用 这个 RSS feed link 抓取 谷歌 趋势
但是 , 我 无法 获得 标签 名 为 <ht:picture_source>..</ht:picture_source> 的 元素 。
我 尝试 了 下面 的 代码 :

$(".trigger").on("click",function() {
    $.ajax({
         url: "https://trends.google.co.in/trends/trendingsearches/daily/rss?geo=US",
         dataType: 'text',
         success: function(data) {

              let post_count = $(data).find('title').length;

              for(let counter = 1; counter < post_count; counter++) {
                  let image = $(data).find('ht:picture').eq(counter).text();
                  console.log(image);
              }
    
          
         }
    });
});

中 的 每 一 个
我 在 控制 台 上 得到 未 定义 或 空 的 。
两 年 前 就 有人 在 GigHub 上 查 过 了 。
任何 帮助 都 是 非常 感谢 的 。

xv8emn3q

xv8emn3q1#

特殊 字符 , 如 :需要 在 jQuery 选择 器 中 进行 转义 。
第 一 个

yizd12fk

yizd12fk2#

作为一种替代方法,如果要抓取40个以上的Google Trends结果,您可以使用一些浏览器自动化功能,例如Puppeteer。在下面的代码中,我向您展示了如何实现这一点(也可以在在线IDE上查看):

const puppeteer = require("puppeteer-extra");
const StealthPlugin = require("puppeteer-extra-plugin-stealth");

puppeteer.use(StealthPlugin());

const baseURL = `https://trends.google.com`;
const countryCode = "US";

async function fillTrendsDataFromPage(page) {
  while (true) {
    const isNextPage = await page.$(".feed-load-more-button");
    if (!isNextPage) break;
    await page.click(".feed-load-more-button");
    await page.waitForTimeout(2000);
  }
  const dataFromPage = await page.evaluate((baseURL) => {
    return Array.from(document.querySelectorAll(".feed-list-wrapper")).map((el) => ({
      [el.querySelector(".content-header-title").textContent.trim()]: Array.from(el.querySelectorAll("feed-item")).map((el) => ({
        index: el.querySelector(".index")?.textContent.trim(),
        title: el.querySelector(".title a")?.textContent.trim(),
        titleLink: `${baseURL}${el.querySelector(".title a")?.getAttribute("href")}`,
        subtitle: el.querySelector(".summary-text a")?.textContent.trim(),
        subtitleLink: el.querySelector(".summary-text a")?.getAttribute("href"),
        source: el.querySelector(".source-and-time span:first-child")?.textContent.trim(),
        published: el.querySelector(".source-and-time span:last-child")?.textContent.trim(),
        searches: el.querySelector(".search-count-title")?.textContent.trim(),
        thumbnail: el.getAttribute("image-url"),
      })),
    }));
  }, baseURL);
  return dataFromPage;
}

async function getGoogleTrendsDailyResults() {
  const browser = await puppeteer.launch({
    headless: false,
    args: ["--no-sandbox", "--disable-setuid-sandbox", "--window-size=1200,700"],
  });

  const page = await browser.newPage();
  page.setViewport({ width: 1200, height: 700 });

  const URL = `${baseURL}/trends/trendingsearches/daily?geo=${countryCode}&hl=en`;

  await page.setDefaultNavigationTimeout(60000);
  await page.goto(URL);

  await page.waitForSelector(".feed-item");

  const dailyResults = await fillTrendsDataFromPage(page);

  await browser.close();

  return dailyResults;
}

getGoogleTrendsDailyResults().then((result) => console.dir(result, { depth: null }));

输出量

[
   {
      "Saturday, November 12, 2022":[
         {
            "index":"1",
            "title":"Man City vs Brentford",
            "titleLink":"https://trends.google.com/trends/explore?q=Man+City+vs+Brentford&date=now+7-d&geo=US",
            "subtitle":"Manchester City vs Brentford, live! Score, updates, how to watch",
            "subtitleLink":"https://soccer.nbcsports.com/2022/11/12/manchester-city-vs-brentford-live-score-update-how-to-watch-stream/",
            "source":"NBC Sports",
            "published":"3h ago",
            "searches":"50K+",
            "thumbnail":"https://t3.gstatic.com/images?q=tbn:ANd9GcTvK7HhL4wuNXu79nC0A4cqCXjVjDAW94xYsl4ilWtcvDtOHRlaufSl1W-jaqIsWLB-zZep_IGN"
         }
      ]
   },
   {
      "Friday, November 11, 2022":[
         {
            "index":"1",
            "title":"Kevin Conroy",
            "titleLink":"https://trends.google.com/trends/explore?q=Kevin+Conroy&date=now+7-d&geo=US",
            "subtitle":"Actor Kevin Conroy, best known as the voice of Batman, died Friday ...",
            "subtitleLink":"https://www.kosu.org/2022-11-11/actor-kevin-conroy-best-known-as-the-voice-of-batman-died-friday-at-age-66",
            "source":"KOSU",
            "published":"16h ago",
            "searches":"1M+",
            "thumbnail":"https://t1.gstatic.com/images?q=tbn:ANd9GcQOc7zuWyBVFJOvCf1JWv5FXDVdg_s9-myrVgcXjDX7YKs_xj7s1WdkZQMoz0Ow1RX2g0qlfbSY"
         },
        ... and other results
      ],
      ... and other days
   }
]

你可以从我的博客文章Web Scraping Google Trends Daily Search with Nodejs中读到更多关于抓取谷歌趋势的信息。

相关问题