Html Agility Pack���g����Web�y�[�W���X�N���C�s���O����ɂ́H�mC#�AVB�n�F.NET TIPS

Html Agility Pack�^XPath�^LINQ��g�ݍ��킹�āAWeb�y�[�W�������̏����Ȍ��Ȍ`�Ŕ����o�����@���������B

» 2015�N01��27�� 17��48�� ���J
[�R�{�N�F�CBluewaterSoft�^Microsoft MVP for Windows Platform Development]
.NET TIPS
Insider.NET

�@

u.NET TIPSṽCfbNX

�A�ږڎ�

�ΏہF.NET 2.0�ȍ~�i������Visual Studio��2010�ȍ~�j


�@Web�y�[�W�̓��e���ǂ̂悤�ɂ��ĉ�͂���΂悢���낤���H �Ⴆ�΁A�L���̈ꗗ���f�ڂ���Ă���Web�y�[�W�̓��e���擾���Ă��āA��������L���̃^�C�g����URL������S�Ď��o�������Ƃ������ꍇ���B���K�\���iSystem.Text.RegularExpressions���O��Ԃ�Regex�N���X�j���g���Ή”\�ł͂��邪�A���Ȃ�ʓ|�ł���BWeb�y�[�W��XHTML�ŋL�q����Ă���Ȃ�XDocument�N���X�iSystem.Xml.Linq���O��ԁj�Ŋy�ɉ�͂ł���͂��Ȃ̂����A������������Web�y�[�W�ɂ�XHTML�ł���Ɛ錾���Ă����Ă�XML�Ƃ��Ă͕s���S�ȋL�q�̂��̂����Ȃ��Ȃ��i��XDocument�N���X�ʼn�͂ł��Ȃ��j�B�����Ŗ{�e�ł́A�I�[�v���\�[�X�̃��C�u�����uHtml Agility Pack�v���g����Web�y�[�W����͂�����@���������B

���O����

�@�{�e�ł́A�����R�[�h���V�t�gJIS�G���R�[�f�B���O�ɂȂ��Ă���Web�y�[�W���擾���ĉ�͂���B�擾�̕��@�ɂ‚��ẮA����TIPS���Q�Ƃ��Ăق����B

�@�ȍ~�Ŏ����T���v���R�[�h�ł́AWeb�y�[�W���擾���镔���͏ȗ����Ă���BWeb�y�[�W��URL��^���Ă��̃y�[�W�̓��e�𕶎���Ƃ��Ď擾���镔���́A��L��TIPS���Q�l�ɂ��Ď������Ă������������B

�@�Ȃ��A��LTIPS�̃R�[�h��O��Ƃ��Ă��邽�߁A�ȍ~�Ŏ����T���v���R�[�h��.NET Framework 4.5�ȍ~�iVisual Studio 2012�^2013�j�p�̂��̂ƂȂ��Ă���B����ȑO�̃o�[�W�����ŃR�[�f�B���O����ꍇ�́A�K�X�C�����Ă��炢�����B

�@�܂��AHtml Agility Pack��NuGet���g���ăC���X�g�[������BVisual Studio 2012�ȍ~�ł́ANuGet���W���Ŏg����悤�ɂȂ��Ă���̂ŁA�������Ȃ��Ă悢�BVisual Studio 2010�iExpress�G�f�B�V�����������j�ł́ANuGet Package Manager���C���X�g�[�����Ă����Ăق����B

Html Agility Pack�𓱓�����ɂ́H

�@Html Agility Pack�́A�v���W�F�N�g���Ƃ�NuGet���瓱������B�ȉ��AVisual Studio 2012�i������Express�G�f�B�V�����j�̏ꍇ�Ő�������B�܂��A�\�����[�V�����G�N�X�v���[���[�œ����������v���W�F�N�g��I�����Ă����āA���j���[�o�[����m�v���W�F�N�g�n�|�mNuGet �p�b�P�[�W�̊Ǘ��n��I�ԁi���̉摜�j�B

mNuGetpbP[W̊Ǘn_CAOJiVisual Studio 2012j �mNuGet�p�b�P�[�W�̊Ǘ��n�_�C�A���O���J���iVisual Studio 2012�j
Html Agility Pack�𗘗p�������v���W�F�N�g���\�����[�V�����G�N�X�v���[���[�őI�����i�i1�j�j�A���j���[�o�[����m�v���W�F�N�g�n�i�i2�j�j�|�mNuGet �p�b�P�[�W�̊Ǘ��n�i�i3�j�j��I�ԂƁA���̉摜�́mNuGet �p�b�P�[�W�̊Ǘ��n�_�C�A���O���\�������B

�@����ƁA�mNuGet �p�b�P�[�W�̊Ǘ��n�_�C�A���O���\�������̂ŁA�����̃y�[���Łm�I�����C���n��I�����Ă���A�E��̌����{�b�N�X�ɁuHtmlAgilityPack�v�i�󔒂Ȃ��j�Ɠ��͂��āmEnter�n�L�[�������B����Ǝ��̉摜�̂悤�ɂ����‚��̃p�b�P�[�W���\�������̂ŁA���̒�����mHtmlAgilityPack�n��I�сA�����ɕ\�����ꂽ�m�C���X�g�[���n�{�^�����N���b�N����i���̉摜�j�B

mHtmlAgilityPacknIŃCXg[iVisual Studio 2012j �mHtmlAgilityPack�n��I��ŃC���X�g�[������iVisual Studio 2012�j
�mNuGet �p�b�P�[�W�̊Ǘ��n�_�C�A���O�̍����̃y�[���Łm�I�����C���n��I�����i�i1�j�j�A�����{�b�N�X�ɁuHtmlAgilityPack�v�i�󔒂Ȃ��j�Ɠ��͂��āmEnter�n�L�[�������i�i2�j�j�B�������ʂ����������ɕ\�������̂ł��̒�����mHtmlAgilityPack�n��I�����i�i3�j�j�A�\�����ꂽ�m�C���X�g�[���n�{�^���i�i4�j�j���N���b�N����ƁAHtml Agility Pack�̃C���X�g�[�����n�܂�B

�@�C���X�g�[���ɐ�������ƁA�m�C���X�g�[���n�{�^���������A���̏ꏊ�ɗΐF�̃`�F�b�N�}�[�N���o��B����������E���́m�‚���n�{�^���Ń_�C�A���O��‚��āA��Ɗ������i���̉摜�j�B

Html Agility Pack̃CXg[iVisual Studio 2012j Html Agility Pack�̃C���X�g�[�������iVisual Studio 2012�j
�C���X�g�[������������ƁA�m�C���X�g�[���n�{�^�����ΐF�̃`�F�b�N�}�[�N�ɕς��i�i1�j�j�B�m�‚���n�{�^���i�i2�j�j�Ń_�C�A���O��‚��āA��Ɗ������B

�@Html Agility Pack�𓱓�������Ń\�����[�V�����G�N�X�v���[���[������ƁA���̉摜�̂悤�ɂȂ��Ă���i���̉摜�A�S�Ẵt�@�C����\�������Ă���j�B�����I�ɎQ�Ɛݒ肪�lj�����A�܂��ANuGet�p�b�P�[�W�Ǘ��p�́upackages.config�v�t�@�C�����쐬����Ă���B

Html Agility Pack̃\[VGNXv[[iVisual Studio 2012j Html Agility Pack������̃\�����[�V�����G�N�X�v���[���[�iVisual Studio 2012�j
VB�̃v���W�F�N�g�͊���ł͎Q�Ɛݒ肪�\������Ȃ��̂ŁA�\�����[�V�����G�N�X�v���[���[�㕔�́m���ׂẴt�@�C����\���n�A�C�R���i�i1�j�j���N���b�N���ĕ\��������iC#�̃v���W�F�N�g�ł͎Q�Ɛݒ�͏�ɕ\������Ă���j�B�Q�Ɛݒ�ɁmHtmlAgilityPack�n���lj�����Ă���i�i2�j�j�B�܂��ANuGet�p�b�P�[�W�Ǘ��p�́upackages.config�v�t�@�C�����쐬����Ă���i�i3�j�j�B

Html Agility Pack���g����Web�y�[�W����͂���ɂ́H

�@�����̗���Ƃ��ẮAWeb�y�[�W�̓��e���擾���A�����Html Agility Pack��HtmlDocument�I�u�W�F�N�g�iHtmlAgilityPack���O��ԁj�ɓǂݍ��܂��Ă���AXPath�iXML Path Language�j��LINQ���g���ĉ�͂��邱�ƂɂȂ�BHtmlDocument�I�u�W�F�N�g���\�z������@�͉���ނ��p�ӂ���Ă���A�����ł͕������n�����@���g�����Ƃɂ���B

�@�T���v���Ƃ��āA����Web�y�[�W���g���i���̉摜�j�B����Web�y�[�W�̓��e����͂��āA�f�ڂ���Ă���L���̃^�C�g���i1000��������Ƃ���j�Ƃ���URL�𔲂��o���Ă݂悤�B

TvɎgWeby[WiInternet Explorerj �T���v���Ɏg��Web�y�[�W�iInternet Explorer�j
����.NET TIPS�����t���C���f�b�N�X�̃y�[�W�ł���B�L���ւ̃����N��1000��������ƌf�ڂ���Ă���i�ŏ���1����Ԙg�Ŏ����j�BHtml Agility Pack���g���ĉ�͂��A���̋L���^�C�g���ƃ����NURL�����o���Ă݂悤�B

�@��̉摜�ŐԘg��t����������̃\�[�X�R�[�h�́A���̂悤�ɂȂ��Ă���B�ړI�̏��𓾂�ɂ́A�uda-tips-index-target�v�Ƃ���class������������<div>�v�f�̒��ɂ���class�����������Ȃ�<div>�v�f��T���A���̒���<a>�v�f�����o���΂悳�����ł���B

<div class="da-tips-section"><a name="2015" id="2015"></a>2015�N</div>
<div class="da-tips-index-target">
  <div class="da-tips-target-title"><a name="20150113" id="20150113"></a>2015/01/13</div>
  <div>&nbsp;- <a href="http://www.atmarkit.co.jp/ait/articles/1501/13/news142.html">HttpClient�N���X�ŃV�t�gJIS��Web�y�[�W���擾����ɂ́H�mC#�AVB�n</a></div>
  <div class="da-tips-target-title"><a name="20150106" id="20150106"></a>2015/01/06</div>
  <div>&nbsp;- <a href="http://www.atmarkit.co.jp/ait/articles/1501/06/news086.html">HttpClient�N���X��Web�y�[�W���擾����ɂ́H�mC#�AVB�n</a></div>
  <div class="da-tips-backindex"><a href="#index">�y�C���f�b�N�X�ꗗ�ɖ߂�z </a></div>
</div>

�L���̃^�C�g���t�߂̃R�[�h�iHTML�j
�uda-tips-index-target�v�Ƃ���class������������<div>�v�f�̒��ɂ���class�����������Ȃ�<div>�v�f�̒���<a>�v�f�ɁA�L���̃^�C�g����URL���܂܂�Ă���i�����̕������ŏ���1���̂��́j�B �f�ڔN���Ƃɕʂ�<div>�v�f�ɂȂ��Ă���A�܂��A���t��<div>�v�f�ƋL���^�C�g����<div>�v�f�����݂ɕ���ł���i�������t�ɕ����̋L�������݂��邱�Ƃ�����j�B�������͂���̂͑�ς������B�ǂݐi�ޑO�ɁA�ǂ̂悤�ȃR�[�h�������Ύ����ł��������������l���Ă݂Ăق����B

�@���̂悤�ȋL���̃^�C�g����URL��S�Ď��o���A�擪��10��������\������R���\�[���v���O�����́AHtml Agility Pack���g���Ǝ��̃R�[�h�̂悤�ɏ�����B

static void Main(string[] args)
{
  Console.WriteLine("HttpClient�N���X�Ŏ擾����Web�y�[�W����͂���iHtml Agility Pack�j");
  // ���Ԍv���p�̃^�C�}�[
  var timer = new System.Diagnostics.Stopwatch();
  timer.Start();

  // .NET TIPS�̓��t���C���f�b�N�X��URL�i�V�t�gJIS�̃y�[�W�j
  Uri webUri = new Uri("http://www.atmarkit.co.jp/ait/subtop/features/dotnet/index_date.html");
  �c�c�ȗ��c�c
  string htmlText = �c�c�ȗ��iWeb�y�[�W�̓��e�𕶎���Ƃ��Ď擾�j�c�c
  Console.WriteLine("HTML�擾����: {0:0.000}�b", timer.Elapsed.TotalSeconds);

  if (htmlText != null)
  {
    // HtmlDocument�I�u�W�F�N�g���\�z����
    var htmlDoc = new HtmlAgilityPack.HtmlDocument();
    htmlDoc.LoadHtml(htmlText);
    Console.WriteLine("HtmlDocument�\�z����: {0:0.000}�b", timer.Elapsed.TotalSeconds);

    // �ړI��<a>�v�f��S�Ď��o���āiXPath�j�A
    // ����href������InnerText�����“����^�I�u�W�F�N�g�̃R���N�V���������iLINQ�j
    // ���`���Ɂuusing System.Linq;�v�̒lj����K�v
    var articles
      = htmlDoc.DocumentNode
        .SelectNodes(@"//div[@class=""da-tips-index-target""]/div[not(@class)]/a")
        .Select(a => new
                      {
                        Url = a.Attributes["href"].Value.Trim(),
                        Title = a.InnerText.Trim(),
                      });
    Console.WriteLine("�^�C�g�����o������: {0:0.000}�b", timer.Elapsed.TotalSeconds);
    Console.WriteLine();

    // �擪10����\������
    Console.WriteLine("�L���^�C�g���擪10���i�S{0}�L�����j", articles.Count());
    foreach(var a in articles.Take(10))
    { 
      Console.WriteLine(a.Title);
      Console.WriteLine(" - {0}", a.Url);
    }
  }
#if DEBUG
  Console.ReadKey();
#endif
}

Sub Main()
  Console.WriteLine("HttpClient�N���X�Ŏ擾����Web�y�[�W����͂���iHtml Agility Pack�j")
  ' ���Ԍv���p�̃^�C�}�[
  Dim timer = New System.Diagnostics.Stopwatch()
  timer.Start()

  ' .NET TIPS�̓��t���C���f�b�N�X��URL�i�V�t�gJIS�̃y�[�W�j
  Dim webUri As Uri = New Uri("http://www.atmarkit.co.jp/ait/subtop/features/dotnet/index_date.html")
  �c�c�ȗ��c�c
  Dim htmlText As String = �c�c�ȗ��iWeb�y�[�W�̓��e�𕶎���Ƃ��Ď擾�j�c�c
  Console.WriteLine("HTML�擾����: {0:0.000}�b", timer.Elapsed.TotalSeconds)

  If (htmlText IsNot Nothing) Then
    ' HtmlDocument�I�u�W�F�N�g���\�z����
    Dim htmlDoc = New HtmlAgilityPack.HtmlDocument()
    htmlDoc.LoadHtml(htmlText)
    Console.WriteLine("HtmlDocument�\�z����: {0:0.000}�b", timer.Elapsed.TotalSeconds)

    ' �ړI��<a>�v�f��S�Ď��o���āiXPath�j�A
    ' ����href������InnerText�����“����^�I�u�W�F�N�g�̃R���N�V���������iLINQ�j
    Dim articles _
      = htmlDoc.DocumentNode _
        .SelectNodes("//div[@class=""da-tips-index-target""]/div[not(@class)]/a") _
        .Select(Function(a) New With _
                            {
                              .Url = a.Attributes("href").Value.Trim(),
                              .Title = a.InnerText.Trim()
                            })
    Console.WriteLine("�^�C�g�����o������: {0:0.000}�b", timer.Elapsed.TotalSeconds)
    Console.WriteLine()

    ' �擪10����\������
    Console.WriteLine("�L���^�C�g���擪10���i�S{0}�L�����j", articles.Count())
    For Each a In articles.Take(10)
      Console.WriteLine(a.Title)
      Console.WriteLine(" - {0}", a.Url)
    Next
  End If
#If DEBUG Then
  Console.ReadKey()
#End If
End Sub

Web�y�[�W�̓��e����͂��ďo�͂���R���\�[���v���O�����̗�i��FC#�A���FVB�j
�ȗ����������ł�Web�y�[�W�̓��e�𕶎���Ƃ��Ď擾���Ă���B���ۂ̃R�[�h�́u.NET TIPS�FHttpClient�N���X�ŃV�t�gJIS��Web�y�[�W���擾����ɂ́H�mC#�AVB�n�v�������������������B�擾����Web�y�[�W�̓��e�i��HTML�h�L�������g�j�́A���[�J���ϐ��uhtmlText�v�Ɋi�[�����B
HTML�h�L�������g��Html Agility Pack�ɉ�͂�����ɂ́AHtml Agility Pack��HtmlDocument�I�u�W�F�N�g�������HTML�h�L�������g��^����B�����ł�HtmlDocument�I�u�W�F�N�g��LoadHtml���\�b�h�ɕ������n���Ă���i�X�g���[���⃍�[�J���t�@�C���̃p�X��n�����@������j�B
�\�z���I�����HtmlDocument�I�u�W�F�N�g�������̗v�f�i�̃R���N�V�����j�����o���ɂ́AXPath��LINQ�����p�ł���B�����ɋL�q����XPath�iSelectNodes���\�b�h�̈����ɓ����镔���j�ɂ‚��ẮA��قǐ�������B�܂��A�����ł�LINQ��Select���\�b�h���g����*1�A<a>�v�f����uhref�v�����̒l��InnerText�i���^�O�̓����̕�����j�����o���ē����^�̃I�u�W�F�N�g�i�̃R���N�V�����j�𐶐����Ă���*2�B�������A�����^�ł͂Ȃ�������ƒ�`�����N���X���g���Ă��悢�B
�擪��10����\�����Ă���Ƃ���ł́ALINQ��Take���\�b�h���g���Ă���B
�o�ߎ��Ԃ�\�����邽�߂�Stopwatch�N���X�iSystem.Diagnostics���O��ԁj���g���Ă���B�R�[�h���Ȍ��ɂ��邽�߂Ɍv�����~�߂��ɃR���\�[���o�͂����Ă���̂ŁA���m�Ȏ��ԕ\���ł͂Ȃ��B�ڈ��Ƃ��Č��Ăق����B
�����ɂ́AVisual Studio����f�o�b�O���s�����Ƃ��A�R���\�[���������ɕ‚��Ă��܂�Ȃ��悤�ɁuConsole.ReadKey()�v�ƋL�q���Ă���B�����ʼn����L�[�������ƃv���O�����͏I������B

�@�����ɂ��ʓ|�����Ɏv������͏������A�ق�̐��s�ŏI����Ă���i�v���O�����̕��Ƃ��Ă�1���j�BHTML�h�L�������g��^���č\�z���I����HtmlDocument�I�u�W�F�N�g�i�����[�J���ϐ��uhtmlDoc�v�j����HTML�̗v�f�i�̃R���N�V�����j�����o���ɂ́A����DocumentNode�v���p�e�B��SelectNodes���\�b�h���g���BSelectNodes���\�b�h�̈����ɂ�XPath�̕������^����B�Ȃ��ADocumentNode�v���p�e�B��ChildNodes�v���p�e�B�ɑ΂���LINQ�������Ȃ�g�����@���̂�邪�AXPath���g���������Ȃ�ʓ|�ɂȂ�B��̃R�[�h����XPath���g���Ă��镔���𔲂��o���āA������x����������i���̃R�[�h�j�B

var articles
  = htmlDoc.DocumentNode
    .SelectNodes(@"//div[@class=""da-tips-index-target""]/div[not(@class)]/a")
    .Select(�c�c�ȗ��c�c

Dim articles _
  = htmlDoc.DocumentNode _
    .SelectNodes("//div[@class=""da-tips-index-target""]/div[not(@class)]/a") _
    .Select(�c�c�ȗ��c�c

HtmlDocument�I�u�W�F�N�g����ړI��HTML�v�f�̃R���N�V���������o���Ă��镔���i��FC#�A���FVB�j
HtmlDocument�N���X��SelectNodes���\�b�h�ŁA�ړI��<a>�v�f��S�Ď��o���Ă���B���̈����ɗ^���Ă��镶����XPath�iXML Path Language�j���B

�@����XPath�́A���o���v�f�܂ł̃p�X�����������̂��B�ڂ�����MSDN�́uXPath�v�Ŋw��ł��炢�������A�T���͎��̂悤�ȈӖ��ł���B

  • �u//div[@class="da-tips-index-target"]�v�FHTML�h�L�������g���̑S�Ă�<div>�v�f�̒��ŁAclass�������uda-tips-index-target�v�ƂȂ��Ă�����̑S��
  • �u/div[not(@class)]�v�F�����̎q�v�f�ɂȂ��Ă���<div>�v�f�̒��ŁAclass�����������Ȃ����̑S��
  • �u/a�v�F�����̎q�v�f�ɂȂ��Ă���<a>�v�f�̑S��

�@����ŖړI�Ƃ���L���^�C�g�����܂�<a>�v�f�̃R���N�V�������擾�ł����̂ŁA���Ƃ�LINQ��Select���\�b�h�ŕK�v�ȏ�񂾂��𔲂��o���������^�I�u�W�F�N�g�̃R���N�V�����𐶐����Ă���̂ł���B

�@���s���Ă݂�ƁA���̉摜�̂悤�ɂȂ�B�����ɋL���^�C�g����URL�����o�����Ƃ��ł����B

s ���s����
HtmlDocument�̍\�z�ɂ��A��������1000���𒴂��L���^�C�g�������o���̂ɂ��A���ꂼ��0.1�b�Ƃ������Ă��Ȃ��iCore i7�^3.4GHz�j�B

*1�@Select���\�b�h�̈����ɂ́A�����_����^����B�����_���ɂ‚��ďڂ����́A����MSDN�̃h�L�������g���Q�Ƃ��Ă������������B

*2�@�����^�́AVisual Studio 2008�œ������ꂽ���̂ŁA�N���X��`�������ɃI�u�W�F�N�g�������@���B�����^�ɂ‚��ďڂ����́A����MSDN�̃h�L�������g���Q�Ƃ��Ă������������B


���p�”\�o�[�W�����F.NET Framework 2.0�ȍ~
�J�e�S���F�N���X���C�u�����@�����ΏہFHTML�h�L�������g
�g�p���C�u�����FHtmlDocument�N���X�iHtml Agility Pack�j
�֘ATIPS�FHTML�t�@�C�����ȒP�ɉ�͂���ɂ́H
�֘ATIPS�FHTML�t�@�C������e�L�X�g�����o���ɂ́H�mC#�AVB�n
�֘ATIPS�FHttpClient�N���X�ŃV�t�gJIS��Web�y�[�W���擾����ɂ́H�mC#�AVB�n
�֘ATIPS�FReadJEnc���g���ĕ����G���R�[�f�B���O�𐄒肷��ɂ́H�mC#�AVB�n


u.NET TIPSṽCfbNX

�u.NET TIPS�v

Copyright© Digital Advantage Corp. All Rights Reserved.

'; if( !this.isSubscription ) { this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); } }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B