.netcore Selenium 抓取百度翻页数据(不处理跳转后链接)

.netcore Selenium Chrome 抓取百度翻页数据 (不处理跳转后链接)

环境准备

nuget packages

  • Selenium.RC
  • Selenium.Support
  • Selenium.WebDriver

nuget packages

chrome driver

  1. 查看 chrome 版本: chrome://settings/help
    在这里插入图片描述

  2. 下载相应的 chromedriver https://chromedriver.chromium.org/downloads
    在这里插入图片描述

  3. 把 chromedriver.exe 丢进工程目录,右键,点击 properties, ‘Copy to output Directory’ 选择 ‘Copy if newer’
    在这里插入图片描述

抓取数据

核心代码

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Collections.Generic;

namespace Demo
{
    public static class DataScraper
    {
        public static void ScrapeData(string url)
        {
            var driver = new ChromeDriver();
            driver.Navigate().GoToUrl(url);

            driver.FindElementByXPath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input").SendKeys("vasdfassdf"); // 搜索关键词
            driver.FindElementByXPath("/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input").Click();
            System.Threading.Thread.Sleep(1000);

            Dictionary<string, string> dic = new Dictionary<string, string>(); // 目标数据 <url, title>

            while (true)
            {
                var content = driver.FindElementByXPath("//*[@id='content_left']");

                var datas = content.FindElements(By.XPath("//*[@class='t']"));

                foreach (var item in datas)
                {
                    var link = item.FindElement(By.XPath("child::a")).GetAttribute("href");
                    var title = item.Text;
                    if(!dic.ContainsKey(link))
                        dic.Add(link, title);
                }

                var nextPage = driver.FindElements(By.XPath("/html/body/div[1]/div[3]/div[2]/div/a[contains(text(),'下一页')]"));
                if (nextPage.Count > 0)
                {
                    nextPage[0].Click();
                    System.Threading.Thread.Sleep(700); // 延时,避免找不到元素
                }
                else
                {
                    break;
                }
            }
            
            driver.Quit();
        }
    }
}

常见问题

  • 如何便捷获取 xpath?
    在这里插入图片描述

  • 如何避免找不到元素报错?

    System.Threading.Thread.Sleep(700); // 延时,避免找不到元素
    
  • 如何检测一个元素是否存在?
    使用 FindElements 寻找,并使用 nextPage.Count > 0 判断是否存在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值