Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7643577
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 31, 20262026-05-31T09:29:01+00:00 2026-05-31T09:29:01+00:00

I wrote a personal web scraper for myself that scraps artist information. the code

  • 0

I wrote a personal web scraper for myself that scraps artist information. the code works but when I press the button and it start processing the while loop, the GUI freezes. I got the textBoxes to .refresh(). But I can’t move the form, also the only way to cancel the program is to force quit. I’m in the process of rewriting this so I don’t get this problem. also, I heard about treading and wanted to see if that would work, and also make it a little faster. the program is scraping 15,000+ pages, and then each page has another 10 or so pages it needs to scrape. So, the program could run for hours before it’s finally finished.

Here is my code.

        private void btnGet_Click(object sender, EventArgs e)
    {
        int i = 0;
        int maxCount = 15000; //11234 was last value 

        progressBar.Maximum = maxCount;

        while (i <= maxCount)
        {
            txbURL.Text = "http://www.newreleasetuesday.com/albumdetail.php?album_id=" + i;
            label.Text = i.ToString() + " out of " + maxCount.ToString() + " Done.";
            progressBar.Value = i;

            string url = txbURL.Text;

            string sourceCode = sourceCode = WorkerClass.getSourceCode(url);
            int startIndex = sourceCode.IndexOf("//alert(document.getElementById(\"remcheck\").value)");
            sourceCode = sourceCode.Substring(startIndex, sourceCode.Length - startIndex);

            //Start Artist Name
            //Gets the Artist's ID
            int idCountIndex = sourceCode.IndexOf("  by <a href=\"artistdetail.php?artist_id=") + 41;
            int idCountEndIndex = sourceCode.IndexOf("\">", idCountIndex);
            string artistID = sourceCode.Substring(idCountIndex, idCountEndIndex - idCountIndex) + "";
            txbArtistID.Text = artistID;

            //Gets Artist's Name
            startIndex = sourceCode.IndexOf("  by <a href=\"artistdetail.php?artist_id=") + 43 + artistID.Length;
            int endIndex = sourceCode.IndexOf("</a> | Genre", startIndex);
            string artistName = sourceCode.Substring(startIndex, endIndex - startIndex) + "";
            txbArtist.Text = artistName;
            //End Artist Name

            //Start Album Name
            //Gets Album's ID
            string albumID = url.Substring(url.IndexOf("=") + 1);
            txbAlbumID.Text = albumID;

            //Gets Album's Name
            startIndex = sourceCode.IndexOf("absbottom\"></span></strong> ") + 28;
            endIndex = sourceCode.IndexOf("</span></td>", startIndex);
            string AlbumName = sourceCode.Substring(startIndex, endIndex - startIndex) + "";
            txbAlbum.Text = AlbumName;
            //End Album Name

            //Start Genre
            startIndex = sourceCode.IndexOf("</a> | Genre: ") + 14;
            endIndex = sourceCode.IndexOf(" | ", startIndex);
            string genre = sourceCode.Substring(startIndex, endIndex - startIndex) + "";
            txbGenre.Text = genre;
            //End Genre

            //Start Release Date
            startIndex = sourceCode.IndexOf("<a href=\"releasedate.php?release_date=") + 50;
            endIndex = sourceCode.IndexOf(" </a></td>", startIndex);
            string releaseDate = sourceCode.Substring(startIndex, endIndex - startIndex) + "";
            txbReleaseDate.Text = releaseDate;
            //End Release Date

            //Start Pic URL
            startIndex = sourceCode.IndexOf("<img  src=\"") + 11;
            endIndex = sourceCode.IndexOf("\"  alt=", startIndex);
            string PicURL = sourceCode.Substring(startIndex, endIndex - startIndex) + "";
            PicURL = PicURL.Replace("amp;", "");
            string fullLink = "http://www.newreleasetuesday.com/" + PicURL;
            txbPicURL.Text = fullLink;
            //End Pic URL


            //Refresh UI (Updates textBoxes, labels, and progressBar with new values)
            txbURL.Refresh();
            txbArtist.Refresh();
            txbAlbum.Refresh();
            txbReleaseDate.Refresh();
            txbGenre.Refresh();
            txbPicURL.Refresh();
            txbArtistID.Refresh();
            txbAlbumID.Refresh();
            label.Refresh();
            progressBar.Refresh();

            if (artistName == "")
            {
                // Adding info to Database if there is no artist name
                string cs = "SERVER=asdf.net;" +
                    "DATABASE=music;" +
                    "UID=root;" +
                    "PASSWORD=asdf;";

                MySqlConnection conn = null;

                conn = new MySqlConnection(cs);
                conn.Open();

                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = "INSERT INTO `emptyalbums` (id, albumid) VALUES('',@albumid)";
                cmd.Prepare();

                cmd.Parameters.AddWithValue("@albumid", albumID);

                cmd.ExecuteNonQuery();
                conn.Close();
            }
            else
            {
                // Adding info to Database if there is an artist name
                string cs = "SERVER=asdf.net;" +
                    "DATABASE=music;" +
                    "UID=root;" +
                    "PASSWORD=asdf;";

                MySqlConnection conn = null;

                conn = new MySqlConnection(cs);
                conn.Open();

                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = conn;
                cmd.CommandText = "INSERT INTO `database` (id, artist, album, releasedate, genre, pictureurl, artistid, albumid) VALUES('',@artist, @album, @releasedate, @genre, @pictureurl, @artistid, @albumid)";
                cmd.Prepare();

                cmd.Parameters.AddWithValue("@artist", artistName);
                cmd.Parameters.AddWithValue("@album", AlbumName);
                cmd.Parameters.AddWithValue("@releasedate", releaseDate);
                cmd.Parameters.AddWithValue("@genre", genre);
                cmd.Parameters.AddWithValue("@pictureurl", fullLink);
                cmd.Parameters.AddWithValue("@artistid", artistID);
                cmd.Parameters.AddWithValue("@albumid", albumID);

                cmd.ExecuteNonQuery();
                conn.Close();
            }
            i++;
            
        }

Any info would go a long way.
Thanks,
Throdne

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-31T09:29:03+00:00Added an answer on May 31, 2026 at 9:29 am

    Multi-threading is indeed the solution to your problem. What happens here is that the treatment is launched on your GUI Thread and everything freezes until your loop has finished processing.

    The implementation of multi-threading will depend on your framework and your needs, but if you use .Net 4.0 you might want to check out the TPL library.

    http://msdn.microsoft.com/en-us/library/dd460717.aspx

    Other than that, a simple google search about mutli-threading will get you where you want to be in no time.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a Perl script I wrote for my own personal use that fetches
I'm developing (another) java web framework for personal use, and in addition to that
I'm using elixir/flask in a small web app I wrote for my own personal
As an exercise with accessibility and a personal challenge to myself I decided that
Recently I wrote myself an Ear Clipping Triangulator as personal research. After visualizing some
I'm trying to write a code library for my own personal use and I'm
I wrote a small internal web app using (a subset of) pylons . As
I wrote a program that forks some processes with fork(). I want to kill
I wrote a routine to remove pounds and ids from sharepoint fields that worked
I wrote my code using this article at msdn as a primary helper My

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.