Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2017, 09:47   #1
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию Несоответствие html-страницы и DownloadString

Хочу получить список товара со страниц p1 u p2
Проблема в том что страница, которая открывается, и текст, который получаю в DownloadString, отличаются.
Как получить точный список со страниц?

Код:
using System;
using System.Net;
namespace trySteamLoader
{
    class Program
    {
        static void Main(string[] args)
        {
            string p1 = "http://steamcommunity.com/market/search?q=&category_730_ItemSet%5B%5D=any&category_730_ProPlayer%5B%5D=any&" +
                        "category_730_StickerCapsule%5B%5D=any&category_730_TournamentTeam%5B%5D=any&category_730_Weapon%5B%5D=any&&"+
                        "category_730_Exterior%5B%5D=any&category_730_Quality%5B%5D=any&category_730_Tournament%5B%5D=tag_Tournament12&"+
                        "category_730_Rarity%5B%5D=any&category_730_Type%5B%5D=tag_CSGO_Type_Machinegun&appid=730#p1_price_asc";
            string p2 = "http://steamcommunity.com/market/search?q=&category_730_ItemSet%5B%5D=any&category_730_ProPlayer%5B%5D=any&" +
                        "category_730_StickerCapsule%5B%5D=any&category_730_TournamentTeam%5B%5D=any&category_730_Weapon%5B%5D=any&&" +
                        "category_730_Exterior%5B%5D=any&category_730_Quality%5B%5D=any&category_730_Tournament%5B%5D=tag_Tournament12&" +
                        "category_730_Rarity%5B%5D=any&category_730_Type%5B%5D=tag_CSGO_Type_Machinegun&appid=730#p2_price_asc";
            ShowData(p1);
            Console.WriteLine();
            ShowData(p2);
            Console.ReadLine();
       }
        static void ShowData(string lnk)
        {
            System.Diagnostics.Process.Start(lnk);
            using (WebClient web = new WebClient())
            {
                string html = web.DownloadString(lnk); // получить страницу
                string tagSearch = "<a class=\"market_listing_row_link\""; // критерий поиска
                string[] itemInf = html.Split(new string[] { tagSearch }, StringSplitOptions.None); // разбить страницу на елемент (11)
                //смотрим последних 10 елементов
                for (int itemNumber = 1; itemNumber < itemInf.Length; itemNumber++)
                {
                    //сплитуем по тегу </span>
                    string[] tagArray = itemInf[itemNumber].Split(new string[] { "</span>" }, StringSplitOptions.None);
                    string itemPrice = null;
                    for (int item=0;item<tagArray.Length;item++)
                    {
                        /*
                         * another code here
                         */
                        tagSearch = "<span class=\"normal_price\">"; //цена товара
                        int i = tagArray[item].IndexOf(tagSearch);
                        if (i >= 0)
                        {
                            //цена товара
                            i += tagSearch.Length;
                            itemPrice = tagArray[item].Substring(i + 1);
                        }
                        tagSearch = "class=\"market_listing_item_name\" style=\"color: #"; //название товара
                        i = tagArray[item].IndexOf(tagSearch);
                        if (i >= 0)
                        {
                            // название товара
                            i += tagSearch.Length + 8;
                            Console.WriteLine("ID:{0,2},\t NAME:{1},\t PRICE:{2}", itemNumber, tagArray[item].Substring(i + 1),itemPrice);
                        }
                    }//for_item
                }//for_itemNumber
            }//using
        }
    }
}
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.07.2017, 10:04   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Либо изучать запросы и/или JS код, либо использовать полноценный браузер (например Selenium).

И не парсить так HTML, возьмите библиотеку какую-нибудь. Например HtmlAgilityPack.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 21.07.2017 в 10:07.
Alex11223 вне форума Ответить с цитированием
Старый 21.07.2017, 10:42   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
И не парсить так HTML, возьмите библиотеку какую-нибудь. Например HtmlAgilityPack.
Не знаком с библиотеками для парсинга. в инете вижу что получу цикл по тегам и я по тегам сплитую.
Во вопрос больше о отличиях данных, а не способе парсинга.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.07.2017, 10:56   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так познакомьтесь, это проще намного. + надежнее, например не зависит от форматирования кода и можно легко искать по наличию класса, а не по точному списку и порядку классов.

А про данные я ж сказал уже, видимо они JS загружаются/генерируется. Изучайте запросы/код или берите браузер/PhantomJS (проще всего через Selenium).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести HTML код страницы (включая код фрэйм страницы) Lorden PHP 0 04.09.2014 18:21
C# WebClient ошибка использования DownloadString Claster Помощь студентам 3 01.11.2012 10:56
Создание HTML страницы Игорек89 Помощь студентам 2 17.12.2009 15:54
Парсинг HTML страницы OkeaH Работа с сетью в Delphi 1 19.01.2009 09:17
Html страницы LineStown Работа с сетью в Delphi 3 11.04.2007 13:16