#お題目
これまでVBAでスクレイピングしていたが、ただいま勉強しているC#でもスクレイピングできるということで、サクッとやってみた。
その備忘録になります。
####0. まずディレクトリ作成
mkdir testScraping
cd testScraping
####1. 次にプロジェクトを作成、AngleSharpのNugetをセッティング
dotnet new console
dotnet add package AngleSharp --version 1.0.0-alpha-827
####2. 次に言語のバージョンをプレビューを追記
(正直、理由は分かってません、涙)
この行追加、の1行を追記してください
testScraping.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<LangVersion>preview</LangVersion> <!-- この行追加 -->
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AngleSharp" Version="1.0.0-alpha-827" />
</ItemGroup>
</Project>
####3. ソースコード記入
次はもう下記のソースコードをProgram.csにまるまるコピペで大丈夫です
Program.cs
using System;
using AngleSharp;
using AngleSharp.Html.Parser;
using System.Net;
using System.Threading.Tasks;
// 参照サイト
// https://qiita.com/okazuki/items/a4eb94f608bbc26c6a5f
// https://usefuledge.com/csharp-webscraping-anglesharp.html
var urlstring = "https://www.yahoo.co.jp/";
WebClient wc = new WebClient();
try
{
string htmldocs = wc.DownloadString(urlstring);
// Console.WriteLine(htmldocs);
var config = Configuration.Default;
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(req => req.Content(htmldocs));
// Console.WriteLine(document.Title);
// foreach (var item in document.QuerySelectorAll("h1.thumb"))
foreach (var item in document.QuerySelectorAll("section#tabpanelTopics1 li"))
{
Console.WriteLine(item.TextContent.Trim());
}
}
catch (System.Exception)
{
throw;
}
簡単ですね。
タグを構造的に指定したい場合は半角スペースで仕切れば大丈夫みたいです。document.QuerySelectorAll("section#tabpanelTopics1 li")
がそうですね。
もう少し複雑なスクレイピングにもトライしたいと思います。
〜おわり〜