Html Agility Pack�^XPath�^LINQ��g�ݍ��킹�āAWeb�y�[�W�������̏����Ȍ��Ȍ`�Ŕ����o�����@���������B
�@
�Ώہ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
�@�{�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�́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
�@����Ɓ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
�@�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��������Ń\�����[�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
�@�����̗���Ƃ��Ắ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
�@��̉摜�ŐԘ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> - <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> - <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����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
�@�����ɂ��ʓ|�����Ɏ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
�@����XPath�́A���o���v�f�܂ł̃p�X�����������̂��B�ڂ�����MSDN�́uXPath�v�Ŋw��ł��炢�������A�T���͎��̂悤�ȈӖ��ł���B
�@����Ŗړ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
*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�v
Copyright© Digital Advantage Corp. All Rights Reserved.