Pertanyaan Menarik data dari halaman web, menguraikannya untuk bagian tertentu, dan menampilkannya


Saya telah menggunakan situs ini untuk waktu yang lama untuk menemukan jawaban atas pertanyaan saya, tetapi saya tidak dapat menemukan jawabannya untuk yang satu ini.

Saya bekerja dengan kelompok kecil pada proyek kelas. Kami akan membangun situs web "perdagangan permainan" kecil yang memungkinkan orang untuk mendaftar, membuat game yang mereka ingin mereka perdagangkan, dan menerima perdagangan dari orang lain atau meminta perdagangan.

Kami memiliki situs yang berfungsi jauh sebelum jadwal sehingga kami mencoba menambahkan lebih banyak ke situs. Satu hal yang ingin saya lakukan sendiri adalah untuk menghubungkan game yang dimasukkan ke Metacritic.

Inilah yang harus saya lakukan. Saya perlu (menggunakan asp dan c # di visual studio 2012) mendapatkan halaman permainan yang benar pada metacritic, tarik datanya, parsing untuk bagian-bagian tertentu, dan kemudian tampilkan data di halaman kami.

Pada dasarnya ketika Anda memilih game yang ingin Anda perdagangkan karena kami ingin div kecil untuk ditampilkan dengan informasi dan rating game. Saya ingin melakukannya dengan cara ini untuk belajar lebih banyak dan mendapatkan sesuatu dari proyek ini yang tidak perlu saya mulai.

Saya bertanya-tanya apakah ada yang bisa memberi tahu saya di mana untuk memulai. Saya tidak tahu cara menarik data dari suatu halaman. Saya masih mencoba mencari tahu apakah saya perlu mencoba dan menulis sesuatu untuk mencari judul game secara otomatis dan menemukan halaman dengan cara itu atau apakah saya dapat menemukan cara untuk langsung membuka halaman gim. Dan setelah saya mendapatkan datanya, saya tidak tahu cara menarik informasi spesifik yang saya perlukan darinya.

Salah satu hal yang tidak membuat ini mudah adalah bahwa saya belajar c ++ bersama dengan c # dan asp jadi saya terus melampirkan kabel saya. Jika seseorang bisa mengarahkan saya ke arah yang benar, itu akan sangat membantu. Terima kasih


15
2017-08-05 18:51


asal


Jawaban:


Contoh kecil ini digunakan HtmlAgilityPack, dan menggunakan XPath penyeleksi untuk sampai ke elemen yang diinginkan.

protected void Page_Load(object sender, EventArgs e)
{
    string Url = "http://www.metacritic.com/game/pc/halo-spartan-assault";
    HtmlWeb web = new HtmlWeb();
    HtmlDocument doc = web.Load(Url);

    string metascore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[1]/div/div/div[2]/a/span[1]")[0].InnerText;
    string userscore = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[1]/div[2]/div[1]/div/div[2]/a/span[1]")[0].InnerText;
    string summary = doc.DocumentNode.SelectNodes("//*[@id=\"main\"]/div[3]/div/div[2]/div[2]/div[1]/ul/li/span[2]/span/span[1]")[0].InnerText;
}

Cara mudah untuk mendapatkan XPath untuk elemen tertentu adalah dengan menggunakan browser web Anda (saya menggunakan Chrome) Alat Pengembang:

  • Buka Alat Pengembang (F12 atau Ctrl + Bergeser + C di Windows atau Perintah + Bergeser + C untuk Mac).
  • Pilih elemen di halaman yang Anda inginkan untuk XPath.
  • Klik kanan elemen di tab "Elemen".
  • Klik "Salin sebagai XPath".

Anda dapat menempelkannya persis seperti itu di c # (seperti yang ditunjukkan dalam kode saya), tetapi pastikan untuk menghindari tanda kutip.

Anda harus memastikan Anda menggunakan teknik penanganan kesalahan karena Web Scrapping dapat menyebabkan kesalahan jika mereka mengubah format HTML halaman.


35
2017-08-05 20:00



saya merekomendasi Dcsoup. Ada paket nuget untuk itu dan ia menggunakan pemilih css sehingga familiar jika Anda menggunakan jquery. Saya sudah mencoba yang lain tetapi itu yang terbaik dan termudah untuk digunakan yang saya temukan. Tidak banyak dokumentasi, tapi itu open source dan port java perpustakaan jsoup yang memiliki dokumentasi yang bagus. Saya sangat menyukainya.

var doc = Dcsoup.Parse(new Uri("http://www.metacritic.com/game/pc/fallout-4"), 5000);

// <span itemprop="ratingValue">86</span>
var ratingSpan = doc.Select("span[itemprop=ratingValue]");
int ratingValue = int.Parse(ratingSpan.Text);

// selectors match both critic and user scores
var scoreDiv = doc.Select("div.score_summary");
var scoreAnchor = scoreDiv.Select("a.metascore_anchor");
int criticRating = int.Parse(scoreAnchor[0].Text);
float userRating = float.Parse(scoreAnchor[1].Text);

8
2017-11-17 12:26



Saya melihat dan Metacritic.com tidak memiliki API.

Anda dapat menggunakan HttpWebRequest untuk mendapatkan konten situs web sebagai string.

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

string result = null;
string url = "http://www.stackoverflow.com";
WebResponse response = null;
StreamReader reader = null;

try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    response = request.GetResponse();
    reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    result = reader.ReadToEnd();
}
catch (Exception ex)
{
    // handle error
    MessageBox.Show(ex.Message);
}
finally
{
    if (reader != null)
        reader.Close();
    if (response != null)
        response.Close();
}

Kemudian Anda dapat mem-parsing string untuk data yang Anda inginkan dengan memanfaatkan penggunaan meta tag Metacritic. Inilah informasi yang mereka miliki dalam tag meta:

  • og: judul
  • og: type
  • og: url
  • og: gambar
  • og: site_name
  • og: deskripsi

Format setiap tag adalah: meta name="og:title" content="In a World..."


6
2017-08-05 20:13