Робот за скрейпене на онлайн издание

Дискусията в 'Скриптове и CMS-и' стартирана от Blinky, Март 27, 2017.

Тагове:
  1. Sky

    Sky Well-Known Member

    Рег.:
    Юли 29, 2012
    Съобщения:
    8,825
    Харесвания:
    651
    Точки:
    113
    Пол:
    Мъж
    Място:
    Стара Загора
    Имаш ли идея защо главно наблягат на xml за сметка на json, който поне за мен в пъти по удобен?
    Сайтове за оферти, дроп шип доставчици всички са с xml.
     
  2. garnet

    garnet Well-Known Member

    Рег.:
    Септ 10, 2009
    Съобщения:
    1,161
    Харесвания:
    53
    Точки:
    48
    4000 заявки по 1-1.5 = 4000 - 6000 сек = 66-100 мин. Ако го направиш на нишки напр 10, за 6-10 мин си готов.
    Или ако не нишки, просто пусни скрипта 10 пъти с различни части от списъка за скрейп.
     
  3. isilona

    isilona Member

    Рег.:
    Юли 11, 2016
    Съобщения:
    68
    Харесвания:
    11
    Точки:
    8
    xml - a е много по стар .. тия системи най вероятно работят с други системи които също ползват xml - и които работят и никой не смее / а и след като работят няма смисъл да пипа/ .. да не говорим че може би са насипани и яко кинти
    отделно на json-а нямаш валидация, докато при xml - а с 2 текстови файла си решаваш 1 камара проблеми
     
  4. AMitrev

    AMitrev Well-Known Member

    Рег.:
    Авг 6, 2012
    Съобщения:
    1,601
    Харесвания:
    272
    Точки:
    83
    Пол:
    Мъж
    Място:
    София
    @Sky ако JSON ти е по удобен значи никога не си виждал нещо сериозно. Един елемент в XML може да има освен стойност и атрибути. Да не говорим за валидацията....
    Човек по лесно ще разбере xml от колкото json-а. За машината реално няма значение.
     
    kamentk и Sky харесват това.
  5. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    23,035
    Харесвания:
    1,784
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    Да, той за това е писан - език, разбираем от машините и хората. eXtensible Markup Language — разширяем маркиращ език. Но има спорове кое е по-добро. Аз и двете ги ползвам. Вече зависи и какво се прави. Примерно повечето API-та са с JSON.
     
  6. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,123
    Харесвания:
    473
    Точки:
    83
    Пусни ми xpath върху json ...
     
  7. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    23,035
    Харесвания:
    1,784
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    JSONPath може би?
     
  8. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,123
    Харесвания:
    473
    Точки:
    83
    Добре де не се изразих правилно
     
  9. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    23,035
    Харесвания:
    1,784
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    Тук с атрибута ме хвана. :) И аз не мога да хвана на един елемент атрибут...но пък може да си направиш мулти арайс. :)
     
  10. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,123
    Харесвания:
    473
    Точки:
    83
    и да циклиш по тях :D
     
  11. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    23,035
    Харесвания:
    1,784
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    С 3 лупа минимум. :D
     
  12. rujel

    rujel Active Member

    Рег.:
    Февру 2, 2016
    Съобщения:
    114
    Харесвания:
    39
    Точки:
    28
    Какво циклене те прихваща? Ако не те интересуват атрибутите, тогава прескачаш! Напротив при xml-а се налага да прилагаш двойно парсване на информацията, което е изцяло глупаво.

    Това, че json няма атрибути не е вярно. Има, стига да искаш! Вместо:
    Код:
    "име":"стойност"
    пишеш:
    Код:
    "име":{"атрибут1":"...", "атрибут2":"...", ... , "value":"стойност"}
    Естествено след това при компютърната обработка ще знаеш за атрибутите и няма да ги разглеждаш като ненужна информация.

    Това, че json няма валидиране не е вярно. Има, стига да искаш! Вместо:
    Код:
    "име":{"нещо1":"...", "нещо2":"...", ...}
    пишеш:
    Код:
    "име":{"нещо1":"...", "нещо2":"...", ... , "end":"име"}
    Естествено след това при обработката ще взимаш под внимания, че последният елемент е вид проверка. Естествено имаш свобода да сложиш каквото си поискаш като проверка: check сума, електронен подпис и т.н.

    На практика xml-а е голям архаизъм, взаимствал идеята на html. Като резултат получаваш излишно повече символи, които и при ръчно четене ти създават проблеми, защото ти натоварват кода с излишни символи, които все пак мозъкът ти разпознава. А това, че оригиналът (html-ът) е създаден просто както се казва "от драсканици" е добре известен факт. После по същия начин се е развивам html, като са добавяно както дойда. Вече голяма част от тези "изобретения" се отричат и не се препоръчват за употреба. Но основната глупост за формата на таговете няма начин да се премахне.
     
    Blinky, ReminD и Torbalan Trolski харесват това.
  13. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,123
    Харесвания:
    473
    Точки:
    83
    Щом казваш :D
    PHP:
    $xml = <<<EOT
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <text>На практика xml-а е голям архаизъм, взаимствал идеята на html. Като резултат получаваш излишно повече символи, които и при ръчно четене ти създават проблеми, защото ти натоварват кода с излишни символи, които все пак мозъкът ти разпознава. А това, че оригиналът (html-ът) е създаден просто както се казва "от драсканици" е добре известен факт. После по същия начин се е развивам html, като са добавяно както дойда. Вече голяма част от тези "изобретения" се отричат и не се препоръчват за употреба. Но основната глупост за формата на таговете няма начин да се премахне.
        </text>
    </root>
    EOT;
    echo "Size: " . strlen($xml);
    Size: 1083
    PHP:
    $json = array(
            
    'root' => array(
            
    'text' => 'На практика xml-а е голям архаизъм, взаимствал идеята на html. Като резултат получаваш излишно повече символи, които и при ръчно четене ти създават проблеми, защото ти натоварват кода с излишни символи, които все пак мозъкът ти разпознава. А това, че оригиналът (html-ът) е създаден просто както се казва "от драсканици" е добре известен факт. После по същия начин се е развивам html, като са добавяно както дойда. Вече голяма част от тези "изобретения" се отричат и не се препоръчват за употреба. Но основната глупост за формата на таговете няма начин да се премахне.',        
        ),
    );
    echo 
    "Size: " strlen(json_encode($json));
    Size: 2797
    А това е едно чиатебелно :)
    Код:
    {"root":{"text":"\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 xml-\u0430 \u0435 \u0433\u043e\u043b\u044f\u043c \u0430\u0440\u0445\u0430\u0438\u0437\u044a\u043c, \u0432\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u0430\u043b \u0438\u0434\u0435\u044f\u0442\u0430 \u043d\u0430 html. \u041a\u0430\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u0448 \u0438\u0437\u043b\u0438\u0448\u043d\u043e \u043f\u043e\u0432\u0435\u0447\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438, \u043a\u043e\u0438\u0442\u043e \u0438 \u043f\u0440\u0438 \u0440\u044a\u0447\u043d\u043e \u0447\u0435\u0442\u0435\u043d\u0435 \u0442\u0438 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0438, \u0437\u0430\u0449\u043e\u0442\u043e \u0442\u0438 \u043d\u0430\u0442\u043e\u0432\u0430\u0440\u0432\u0430\u0442 \u043a\u043e\u0434\u0430 \u0441 \u0438\u0437\u043b\u0438\u0448\u043d\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0438, \u043a\u043e\u0438\u0442\u043e \u0432\u0441\u0435 \u043f\u0430\u043a \u043c\u043e\u0437\u044a\u043a\u044a\u0442 \u0442\u0438 \u0440\u0430\u0437\u043f\u043e\u0437\u043d\u0430\u0432\u0430. \u0410 \u0442\u043e\u0432\u0430, \u0447\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044a\u0442 (html-\u044a\u0442) \u0435 \u0441\u044a\u0437\u0434\u0430\u0434\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a\u0442\u043e \u0441\u0435 \u043a\u0430\u0437\u0432\u0430 \"\u043e\u0442 \u0434\u0440\u0430\u0441\u043a\u0430\u043d\u0438\u0446\u0438\" \u0435 \u0434\u043e\u0431\u0440\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0444\u0430\u043a\u0442. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e \u0441\u044a\u0449\u0438\u044f \u043d\u0430\u0447\u0438\u043d \u0441\u0435 \u0435 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043c html, \u043a\u0430\u0442\u043e \u0441\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u043e \u043a\u0430\u043a\u0442\u043e \u0434\u043e\u0439\u0434\u0430. \u0412\u0435\u0447\u0435 \u0433\u043e\u043b\u044f\u043c\u0430 \u0447\u0430\u0441\u0442 \u043e\u0442 \u0442\u0435\u0437\u0438 \"\u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f\" \u0441\u0435 \u043e\u0442\u0440\u0438\u0447\u0430\u0442 \u0438 \u043d\u0435 \u0441\u0435 \u043f\u0440\u0435\u043f\u043e\u0440\u044a\u0447\u0432\u0430\u0442 \u0437\u0430 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0430. \u041d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u0442\u0430 \u0433\u043b\u0443\u043f\u043e\u0441\u0442 \u0437\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043d\u0430 \u0442\u0430\u0433\u043e\u0432\u0435\u0442\u0435 \u043d\u044f\u043c\u0430 \u043d\u0430\u0447\u0438\u043d \u0434\u0430 \u0441\u0435 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0435."}}
    Бъркаш валидирането интегритета на данните и структурата на документа.
    За данните си има XML Signature и JSON Web Signature (JWS)

    Също така покрай xml-а вървят и много други благинки като XSLT и XSD.

    Така че, няма такова животно като най-добър програмен език, формат, СУБД итн. Според конкретния случай си избираш технологията.
     
    Последно редактирано: Апр 1, 2017
    Blinky, rujel и hristonev харесват това.
  14. rujel

    rujel Active Member

    Рег.:
    Февру 2, 2016
    Съобщения:
    114
    Харесвания:
    39
    Точки:
    28
    Не си усвоил php-то достатъчно добре. Така се пише:
    Код:
    json_encode($json,JSON_UNESCAPED_UNICODE)
    и естествено резултатът е: Size: 1033 срещу Size: 1073.
    Между другото може да изцедиш пример при който размерът е по-малък, но в общия случай е точно на обратното, като в твоя пример!

    Не ги бъркам! Просто казвам, че това са неща, които е добре да имаш като опция когато трябва, а не да си задължен в "интегрирането" на валидирането, дори и когато не ти трябва (примерно, ако кодът се генерира автоматично и никога няма да се разглежда "човешки").

    Тук не мога да не се съглася. Наистина xml е изключително калпав стандарт, но поради своето разпространение има много неща направени специално за него. Ако бяха ги направили същите за json, тогава щеше да е още по-добре. То между другото и това е едно от предимствата на езика php - език, който иначе кой ли не програмист не оплюва, като синтаксис и семантика.

    И като говорим за излишни символи, то би ли ми обяснил защо XML-ът използва такива тагове:
    Код:
    <ТАГ атрибути>съдържание</ТАГ>
    вместо далеч по-компактните от вида:
    Код:
    <ТАГ атрибути | съдържание>
    Забележи, че тук вече не става дума за по-различен формат на представяне на данните (какъвто е json). Всичко си се пренаписва 1:1 от XML формата, но се махат ненужни символи!

    Отговорът на горният въпрос вече го дадох. XML е наследен от html формата, при който нещата са започнати да се правят както се казва с краката си (и чак при стандарт html 5 се стигна до големи спорове как да се оправи кашата).
     
    ReminD харесва това.
  15. Blinky

    Blinky Owner

    Рег.:
    Апр 12, 2006
    Съобщения:
    23,035
    Харесвания:
    1,784
    Точки:
    113
    Пол:
    Мъж
    Професия:
    Dev
    Място:
    Sofia
    Харесва ми как върви темата. Ще се включа днес като изчета написаното. Айде да не спама сега. :)
     
  16. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,123
    Харесвания:
    473
    Точки:
    83
    Не бой се, прекрасно съм светнат за json константите. Щом се хващаш за юникода смени кирилицата с кавички и слешове :D
    Идеята беше, че при json-а се налага искейп.

    И къде е задължителното валидиране? Освен, ако за теб валидиране е проверката дали има затварящ таг. А като гледам други смислени забележки към стандарта нямаш.
    И пак повтарям
    И освен това явно не оценяваш предимството само с проверка на схемата да отхвърлиш невалидни данни.
    Примерно дължина на атрибута, стринг в числово поле итн.

    Щом така смяташ, кой съм аз, че да подкрепям милионите льольовци по света, които го използват.

    child elements maybe?
    Или така ти изглежда по-смислено?
    Код:
    <ТАГ атрибути | съдържание <ТАГ атрибути | съдържание <ТАГ атрибути | съдържание>>>
    И пак повтарям. Не съм някакъв фанатичен привърженик на нито една технология
    Но пък да отричаш стандарт, който ти е леко мътен на базата някакви смешни доводи, че видите ли имало излишни символи е смешно.
     
  17. rujel

    rujel Active Member

    Рег.:
    Февру 2, 2016
    Съобщения:
    114
    Харесвания:
    39
    Точки:
    28
    Очевидно заради неправилен php код изкара двойно по-голям размер. И след това ми казваш "прекрасно съм светнат" - ами няма какво да добавя. Ти сериозно ли си мислиш, че escape-ването на кавичките при json няма съответния еквивалент при XML? Знаците "<" и ">" не се ли escape-ват с "&lt;" и "&gt;"?

    Аз стандарта не го отричам изцяло. Аз просто искам да кажа, че да се твърди, че XML има някакви сериозни предимства пред json е по-скоро глупост. Дори и да има някакво малко предимство, то е много мизерно на практика.

    Схемата, която е дървено заложена в XML не е особено предимство. Причината е, че при json пак можеш да си направиш каквато си пожелаеш схема. Никой не те спира!!! При това тя точно ще отговаря на изискванията за съответната употреба.

    Ако говориш за бележката ми за php, то нещо не схвана какво казах. Казах, че нещо, което е некачествено, но много добре развито си има предимствата, които не могат да се пренебрегнат. Затова милионите льольовци (между които а аз самият) го използват. На php нещата се правят лесно, защото при проблем с едно търсене с Google нещата се оправят. При някой много по-добър език за програмиране е възможно така да "увиснеш", че да се чудиш как да си довършиш програмата.

    Формулирай си по-ясно мисълта, че тук тази тъпа демонстрация не се разбра какво се опитваш да постигнеш с нея.

    С наличието на излишните символи исках само да кажа, че когато е правен стандарта не е мислено много много. И пак ще се повторя: "Аз просто искам да кажа, че да се твърди, че XML има някакви сериозни предимства пред json е по-скоро глупост.". Двата стандарта са горе долу заменими, но XML е по-стария и затова се парсва малко по-сложно.

    И двата стандарта на практика не правят много повече от това да задават по естествен начин синтаксис на информатичната структура дърво. С някои допълнения, които, обаче никак не са толкова съществени.
     
  18. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,123
    Харесвания:
    473
    Точки:
    83
    CDATA?!?
    И как ще дефинираш вложените елементи? Ако можеш направи ми по-умна демонстрация по според теб "правилния" начин.
    Код:
    <ТАГ-1 атрибути | съдържание <ТАГ-2 атрибути | съдържание <ТАГ-3 атрибути | съдържание>>>
    Код:
    <ТАГ-1 атрибути>
        съдържание
        <ТАГ-2 атрибути>
            съдържание>
            <ТАГ-3 атрибути>
                <съдържание>
            </ТАГ-3>
        </ТАГ-2>
    </ТАГ-1>
    
    Спирам да си търкам клавиатурата. Очевидно не си наясно.
    Може да се обогатиш малко тук.
    Много ми е интересно как ще провериш такова семпло документче като митническа декларация пусната в json. Включително за допустими типове и стойности на атрибутите итн.
    А да, и без да циклиш през масивите, за което първоначално се заяде с мен :D
     
  19. rujel

    rujel Active Member

    Рег.:
    Февру 2, 2016
    Съобщения:
    114
    Харесвания:
    39
    Точки:
    28
    А значи, правилно си разбрал какво имах предвид. Но го представи много нечетабилно. Ето така трябва да е, а не както си показал на 1 ред:
    Код:
    <ТАГ1 атрибути |
      съдържание
      <ТАГ2 атрибути |
        съдържание
        <ТАГ3 атрибути |
          съдържание
        >
      >
    >
    Ако не ми формулираш ясно задачата, то няма и как да ти покажа как се проверява въпросното семпло документче. Ако искаш покажи как се прави на XML и веднага ще ти покажа как става с json.
     
  20. Torbalan Trolski

    Torbalan Trolski Well-Known Member

    Рег.:
    Авг 1, 2013
    Съобщения:
    2,123
    Харесвания:
    473
    Точки:
    83
    И каква е разликата между двете? В pretty printa ли? Двата документа са абсолютно идентични.
    И сега си представи нещо с една купчина с комплексни типове и сикуенси.
    После:
    1. опитай се да напишеш парсер по твоя формат
    2. Намери си грешка в данните представени по твоя начин
    Пускаш документа в парсера и той ти плюе грешките. Вземи поразгледай линка от предния пост.
     

Сподели страницата

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies.
    Dismiss Notice