如何使用VB.NET获取Pokehub Coordinates网站的宝可梦信息
VB.net获取pokehubcoordinates.com宝可梦信息解决方案
你所用的两种方法仅能获取站点的静态HTML源码,该站点的宝可梦数据由JavaScript动态加载,静态HTML中不存在目标内容,因此无法直接拿到需要的信息,可通过以下两种方案解决:
方案1:调用站点数据接口(优先推荐)
通过浏览器开发者工具的「网络」面板筛选Fetch/XHR请求,可找到站点加载宝可梦数据的后端接口,直接请求接口即可拿到结构化的JSON数据,解析后即可获得目标信息,该方式执行效率最高。
示例代码(使用官方推荐的HttpClient替代已废弃的WebClient):
' 提前导入System.Net.Http命名空间 Private Shared ReadOnly httpClient As New HttpClient() Async Function GetPokemonDataAsync() As Task(Of String) ' 替换为抓包获取的实际数据接口地址 Dim apiUrl As String = "https://pokehubcoordinates.com/实际数据接口路径" ' 添加请求头模拟浏览器访问,避免被反爬拦截 httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json") Dim response As HttpResponseMessage = Await httpClient.GetAsync(apiUrl) response.EnsureSuccessStatusCode() Dim jsonResult As String = Await response.Content.ReadAsStringAsync() ' 后续可通过Newtonsoft.Json或System.Text.Json解析JSON获取宝可梦字段 Return jsonResult End Function
方案2:无头浏览器渲染页面
如果接口有加密等反爬措施无法直接调用,可使用无头浏览器模拟完整浏览器加载流程,等待JS渲染完成后再提取数据,常用工具为Selenium、Puppeteer Sharp。
Selenium示例代码:
' 提前通过Nuget安装Selenium.WebDriver和Selenium.WebDriver.ChromeDriver Imports OpenQA.Selenium Imports OpenQA.Selenium.Chrome Sub GetPokemonDataBySelenium() Dim options As New ChromeOptions() ' 启用无头模式,不弹出浏览器窗口 options.AddArgument("--headless=new") options.AddArgument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") Using driver As IWebDriver = New ChromeDriver(options) driver.Navigate.GoToUrl("https://pokehubcoordinates.com/pvp") ' 等待页面渲染完成,也可替换为显式等待匹配目标元素出现 Threading.Thread.Sleep(3000) ' 替换为实际宝可梦列表元素的CSS选择器提取内容 Dim pokemonList = driver.FindElements(By.CssSelector("目标元素CSS选择器")) For Each pokemon In pokemonList ' 逐条处理宝可梦信息 Console.WriteLine(pokemon.Text) Next ' 也可直接获取渲染完成的完整HTML Dim fullRenderedHtml As String = driver.PageSource File.WriteAllText("e:\test_rendered.html", fullRenderedHtml) End Using End Sub
内容的提问来源于stack exchange,提问作者Emin Yalçın
相关产品推荐
相关产品推荐

