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

Sky

Well-Known Member
Чакам деня в който ще мигрират и ще получавам данните накуп в xml/json/etc. :)
Имаш ли идея защо главно наблягат на xml за сметка на json, който поне за мен в пъти по удобен?
Сайтове за оферти, дроп шип доставчици всички са с xml.
 

garnet

Well-Known Member
4000 заявки по 1-1.5 = 4000 - 6000 сек = 66-100 мин. Ако го направиш на нишки напр 10, за 6-10 мин си готов.
Или ако не нишки, просто пусни скрипта 10 пъти с различни части от списъка за скрейп.
 

isilona

Member
Имаш ли идея защо главно наблягат на xml за сметка на json, който поне за мен в пъти по удобен?
Сайтове за оферти, дроп шип доставчици всички са с xml.
xml - a е много по стар .. тия системи най вероятно работят с други системи които също ползват xml - и които работят и никой не смее / а и след като работят няма смисъл да пипа/ .. да не говорим че може би са насипани и яко кинти
отделно на json-а нямаш валидация, докато при xml - а с 2 текстови файла си решаваш 1 камара проблеми
 

AMitrev

Well-Known Member
@Sky ако JSON ти е по удобен значи никога не си виждал нещо сериозно. Един елемент в XML може да има освен стойност и атрибути. Да не говорим за валидацията....
Човек по лесно ще разбере xml от колкото json-а. За машината реално няма значение.
 

Blinky

Owner
Човек по лесно ще разбере xml от колкото json-а. За машината реално няма значение.
Да, той за това е писан - език, разбираем от машините и хората. eXtensible Markup Language — разширяем маркиращ език. Но има спорове кое е по-добро. Аз и двете ги ползвам. Вече зависи и какво се прави. Примерно повечето API-та са с JSON.
 

Torbalan Trolski

Well-Known Member
Пусни ми xpath върху json ...
 

Torbalan Trolski

Well-Known Member
Добре де не се изразих правилно
Един елемент в XML може да има освен стойност и атрибути.
 

Torbalan Trolski

Well-Known Member
и да циклиш по тях :D
 

rujel

Active Member
и да циклиш по тях :D
Какво циклене те прихваща? Ако не те интересуват атрибутите, тогава прескачаш! Напротив при xml-а се налага да прилагаш двойно парсване на информацията, което е изцяло глупаво.

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

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

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

Torbalan Trolski

Well-Known Member
Като резултат получаваш излишно повече символи, които и при ръчно четене ти създават проблеми, защото ти натоварват кода с излишни символи, които все пак мозъкът ти разпознава.
Щом казваш :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."}}
Това, че json няма валидиране не е вярно.
Бъркаш валидирането интегритета на данните и структурата на документа.
За данните си има XML Signature и JSON Web Signature (JWS)

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

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

rujel

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

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

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

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

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

Torbalan Trolski

Well-Known Member
Не си усвоил php-то достатъчно добре.
Не бой се, прекрасно съм светнат за json константите. Щом се хващаш за юникода смени кирилицата с кавички и слешове :D
Идеята беше, че при json-а се налага искейп.

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

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

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

rujel

Active Member
Не бой се, прекрасно съм светнат за json константите. Щом се хващаш за юникода смени кирилицата с кавички и слешове :D
Идеята беше, че при json-а се налага искейп.
Очевидно заради неправилен php код изкара двойно по-голям размер. И след това ми казваш "прекрасно съм светнат" - ами няма какво да добавя. Ти сериозно ли си мислиш, че escape-ването на кавичките при json няма съответния еквивалент при XML? Знаците "<" и ">" не се ли escape-ват с "&lt;" и "&gt;"?

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

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

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

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

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

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

Torbalan Trolski

Well-Known Member
Очевидно заради неправилен php код изкара двойно по-голям размер. И след това ми казваш "прекрасно съм светнат" - ами няма какво да добавя. Ти сериозно ли си мислиш, че escape-ването на кавичките при json няма съответния еквивалент при XML? Знаците "<" и ">" не се ли escape-ват с "&lt;" и "&gt;"?
CDATA?!?
Формулирай си по-ясно мисълта, че тук тази тъпа демонстрация не се разбра какво се опитваш да постигнеш с нея.
И как ще дефинираш вложените елементи? Ако можеш направи ми по-умна демонстрация по според теб "правилния" начин.
Код:
<ТАГ-1 атрибути | съдържание <ТАГ-2 атрибути | съдържание <ТАГ-3 атрибути | съдържание>>>
Код:
<ТАГ-1 атрибути>
    съдържание
    <ТАГ-2 атрибути>
        съдържание>
        <ТАГ-3 атрибути>
            <съдържание>
        </ТАГ-3>
    </ТАГ-2>
</ТАГ-1>
Спирам да си търкам клавиатурата. Очевидно не си наясно.
И пак ще се повторя: "Аз просто искам да кажа, че да се твърди, че XML има някакви сериозни предимства пред json е по-скоро глупост."
Схемата, която е дървено заложена в XML не е особено предимство. Причината е, че при json пак можеш да си направиш каквато си пожелаеш схема.
Може да се обогатиш малко тук.
Много ми е интересно как ще провериш такова семпло документче като митническа декларация пусната в json. Включително за допустими типове и стойности на атрибутите итн.
А да, и без да циклиш през масивите, за което първоначално се заяде с мен :D
 

rujel

Active Member
А значи, правилно си разбрал какво имах предвид. Но го представи много нечетабилно. Ето така трябва да е, а не както си показал на 1 ред:
Код:
<ТАГ1 атрибути |
  съдържание
  <ТАГ2 атрибути |
    съдържание
    <ТАГ3 атрибути |
      съдържание
    >
  >
>
Много ми е интересно как ще провериш такова семпло документче като митническа декларация пусната в json. Включително за допустими типове и стойности на атрибутите итн.
А да, и без да циклиш през масивите, за което първоначално се заяде с мен :D
Ако не ми формулираш ясно задачата, то няма и как да ти покажа как се проверява въпросното семпло документче. Ако искаш покажи как се прави на XML и веднага ще ти покажа как става с json.
 

Torbalan Trolski

Well-Known Member
И каква е разликата между двете? В pretty printa ли? Двата документа са абсолютно идентични.
И сега си представи нещо с една купчина с комплексни типове и сикуенси.
После:
1. опитай се да напишеш парсер по твоя формат
2. Намери си грешка в данните представени по твоя начин
Ако искаш покажи как се прави на XML и веднага ще ти покажа как става с json.
Пускаш документа в парсера и той ти плюе грешките. Вземи поразгледай линка от предния пост.
 

Горе