-1

StreamWriter を使用して現在のプロジェクトのスクレーパーをコーディングする際に問題が発生しています。私がコーディングしたループは以下のとおりです

ループに入るすべての変数をデバッグしましたが、すべてが適切に設定されています。URL と、URL の ID GET 変数に基づいて検索する範囲を渡すと、2 番目の sourceCode 文字列の書き込みに失敗します

私が何かを洗い流していないか、ここで何か他のものが働いているかどうか、誰かが親切に教えてくれますか??

根本的な原因を見つけようとして頭を悩ませましたが、非常に頑固であることがわかりました

using System;
using System.IO;
using System.Windows.Forms;

namespace Scraper
{
    public partial class Form1 : Form
    {
        Scraper scraper = new Scraper();
        private StreamWriter sw;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string url = textBox1.Text;
            string[] urlBits = url.Split('.');
            string[] domain = urlBits[2].Split('/');

            string filepath = @"C:\Users\Herbaldinho\Desktop\"+urlBits[1]+"-"+domain[0];
            string parentPath = @"C:\Users\Herbaldinho\Desktop\";
            string newPath = Path.Combine(parentPath, filepath);

            if (File.Exists(filepath))
            {}
            else
            {
                Directory.CreateDirectory(newPath);
            }
            DateTime today = DateTime.Today;
            string curDate = String.Format("{0:ddd-MMM-dd-yyyy}", today);
            string subPath = newPath + "\\" + curDate;
            string newSubPath = Path.Combine(newPath, subPath);

            if (File.Exists(subPath))
            { }
            else
            {
                Directory.CreateDirectory(newSubPath);
            }

            string lower = textBox2.Text;
            int lowerValue;
            int.TryParse(lower, out lowerValue);

            string upper = textBox3.Text;
            int upperValue;
            int.TryParse(upper, out upperValue);

            int i;
            for (i = lowerValue; i < upperValue; i++)
            {
                string filename = newSubPath+"\\Advert-"+i+".html";
                string adPage = url + i;
                bool write = scraper.UrlExists(adPage);
                if (write)
                {
                    string sourceCode = scraper.getSourceCode(adPage);
                    using (sw = new StreamWriter(filename))
                    {
                        sw.Write(sourceCode);
                    }
                }
            }
            MessageBox.Show("Scrape Complete");

        }
    }
}

####This is the Scraper Object
using System.Net;

namespace Scraper
{
class Scraper
{
    WebClient w = new WebClient();
    public bool UrlExists(string url)
    {
        try
        {
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "HEAD";
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            return (response.StatusCode == HttpStatusCode.OK);
        }
        catch
        {
            return false;
        }
    }

    public string getSourceCode(string url)
    {
        string s = w.DownloadString(url);
        return s;
    }
}

}

4

1 に答える 1

0

今朝、問題に対する答えを見つけました。同様の問題を抱えている他の人にとっては、UrlExists メソッドの try catch ロジックで応答を閉じる必要があります (response.Close())。これは役立ちます

これを解決するのを手伝ってくれた反応に感謝します

于 2012-05-14T14:38:23.170 に答える