とあるC#のスクレイピングソフトの記録 1-6 操作の基本を作る(´・ω・)ス

★ここまでの歩み★
某サイトからWEBスクレイピングでバスバスと情報を集めるプログラムが完成。
だが、脳内CRONに自動フォーゲット機能が装備されている為、
再度使う為にコードに直接書くのは後々メンドクサイ事になると考える。
また使う時に、こりゃ、便利すぎんだろjk状態まで仕上げる事に。
今夜はやきとり屋で一杯引っ掛けやんよとウズウズしながら書き始めた・・・
早速、続き(´・ω・)ス
まずは webBrowser上でクリックした値と、バックグランドでWebClientを用意。
理由はどうも完全に読み込みでアクション起こしたいのだが、
どうも上手くいかないケースが発生する為。
//どうもjavascriptらしいが
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using HtmlAgilityPack;
namespace プログラ名(´・ω・)ス
{
public partial class Form1 : Form
{
string url;
string nowurl; // 現在のURL
string gr; //業種番号(ジャンル番号)
string 地域;
WebClient web = new WebClient();
public Form1()
{
InitializeComponent();
}
private void webBrowser1_DocumentCompleted(
object sender, WebBrowserDocumentCompletedEventArgs e)
{
//ここがどうも上手くいかないででござる。
}
そんな感じで初期で、つづけて、
private void button1_Click(object sender, EventArgs e)
{
url = webBrowser1.Url.ToString();
nowurl = webBrowser1.Url.ToString();
label1.Text = url;
//バックグランドで取得
string html = web.DownloadString(url);
//HtmlDocumentクラスにHTMLをセット
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
HtmlAgilityPack.HtmlNodeCollection nodes
= doc.DocumentNode.SelectNodes("xPaht(´・ω・)ス");
foreach (HtmlNode node in nodes)
{
//改行を消す
地域 = node.InnerText;
地域 = 地域.Replace("\r", "").Replace("\n", ""); //改行消し
地域 = 地域.Replace(">", ">"); //>消し
label1.Text = 地域;
}
//このあと文字列操作(´・ω・)ス
・・・とこんな感じで、クリックしたらURLを取得しつつ値にいれるという荒業。
抜けてるが初期でwebBrowserをナビゲート。
同じくジャンルも取得しつつ・・・
問題はこの操作余計なアドレスを踏むとパラメーターがバスバスついてきて、
文字列をここでも正規表現で抜かなきゃ成らないのがアレ。
もう、これは「この操作じゃきゃエラー」という仕様に。
あとは各ページをタイマーでガッソガソ抜けばいいのだが、
負荷が気になるな・・・。
この後の実装は、
1.ページ巡回でテキストボックスに格納
2.CSVに書き出し。
このテキストボックスもデータグリッドにしておけば、
そのままMySQLにぶちこめるという夢も広がる(´・ω・)ス
そんな記録。
