スクレイピングは虫の息 | WEB系技術電脳日記

スクレイピングは虫の息

やっと・・・できた模様。
まったく普段からC#触らないからこうなるズラ。


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using HtmlAgilityPack;
using System.Net;

namespace Html_Agility_Pack_テスト
{
public partial class Form1 : Form
{
string url = "http://itp.ne.jp/dir_result/?";
int g = 1; //カテゴリ
int p = 1; // ページ数
int areapage = 0;
int catnum = 0;
//= new int10203;
//TODO num=50 忘れないように。

//外部ファイル エリア.txtの読み込み
string[] area = File.ReadAllLines("エリア.txt",
System.Text.Encoding.GetEncoding("Shift_JIS"));
//外部ファイル カテゴリ.txtの読み込み
string[] cat = File.ReadAllLines("カテゴリ.txt",
System.Text.Encoding.GetEncoding("Shift_JIS"));
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//area[]はマックス125
//
}

private void button1_Click(object sender, EventArgs e)
{
timer1.Interval = 9000;
timer1.Start();

}

private void timer1_Tick(object sender, EventArgs e)
{
try
{
label1.Text = area[areapage];
label4.Text = p.ToString();
label6.Text = cat[catnum];
//Webサイトに接続してHTMLを取得
string url = "某アドレス/?gr=" + cat[catnum] + "&pg=" + p + "&ad=" + area[areapage] + "&num=50";
WebClient web = new WebClient();
string html = web.DownloadString(url);

//HtmlDocumentクラスにHTMLをセット
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

//h2タイトルと住所電話抜き
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes(@"
/html[1]/body[1]/div[1]/div[2]/div[4]/div[1]/div[1]/div/div[1]/div[1]/h2[1]/a[1]|
/html[1]/body[1]/div/div/div/div/div/div/div/table/tr/td|
/html[1]/body[1]/div/div/div/div/div/div/div[1]/h2[1]/a[1]|
/html[1]/body[1]/div[1]/div[2]/div[4]/div[1]/div[1]/div/table/tr/td");

textBox1.Text += "■■■■■■■■■■■■■■■■■■■■■■■■■■■■" + "\r\n";
textBox1.Text += "エリア" + area[areapage] + "\r\n" + "カテゴリ" + g + "\r\n" + "ページ" + p + "\r\n";
textBox1.Text += "■■■■■■■■■■■■■■■■■■■■■■■■■■■■" + "\r\n";
textBox1.Text += "↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓" + "\r\n";
foreach (HtmlNode node in nodes)
{

textBox1.Text += node.InnerText + ",\r\n";


}
p++;
}
catch
{
if ( areapage == 125)
{
areapage = 0;
catnum++;
}
else
{
areapage++;
p = 1;
}
}
}

private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
}
}
}


あとカテゴリのエンドは決めておけばおk。
一応テストしておくか。

ここで、URLとメールが含まれてたりするので、
ここは、正規表現で消す事に。