首页 > 解决方案 > 使用 AngleSharp 和 CSS 选择器的 C# Web 抓取知识面板/Google 页面

问题描述

背景:我正在尝试抓取谷歌页面的一部分,专门用于餐馆的知识面板。检索搜索到的场所的名称、地址、营业时间、网站链接、电话号码等以及其业务页面中出现的其他此类信息。(谷歌页面的右侧)

安装和使用的 NuGet 包是 AngleSharp。

问题:在调试模式下尝试锁定 CSS 选择器后,它说“枚举没有产生结果”,因此我没有收到任何输出。

我相信程序无法正确锁定正确的 CSS 选择器。

这个问题的解决方案可能是什么?

提前致谢 :)

namespace WebScrapingTutorial
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        internal async void ScrapeWebsite()
        {
            var config = Configuration.Default.WithDefaultLoader();
            
            //Example restaurant
            var address= "https://www.google.com/search?q=the+ledbury+restaurant+london&rlz=1C1CHBF_en-GBGB914GB914&oq=the+ledbury+restaurant+london&aqs=chrome..69i57j46j0l4.147j0j9&sourceid=chrome&ie=UTF-8";

            //cellSelector contains CSS Selector of the restaurant's address
            var cellSelector = "#rhs > div > div.kp-blk.knowledge-panel.Wnoohf.OJXvsb > div > div.ifM9O > div > div.SALvLe.farUxc.mJ2Mod > div > div.EfDVh.mod > div > div > span.LrzXr";

            var cells = document.QuerySelectorAll(cellSelector);
            var titles = cells.Select(m => m.TextContent);

            //Output
            foreach (var title in titles ) { rtbData.Text = title;  }
        }

        private void btnScrape_Click(object sender, EventArgs e)
        {
            ScrapeWebsite();

        }
    }
}

标签: c#web-scraping

解决方案


通过浏览器访问的网站。你想刮。程序收到的同一网站有时会略有不同,因网站而异。因此 CSS Selector 应该从接收到程序(后者)的网站中获取,以解决以下问题。


推荐阅读