LINUX.ORG.RU

3
Всего сообщений: 45

Парсинг невалидного (не по стандартам) DOM

Использую простую схему:


        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        try {
            db = dbf.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            throw new HtmlProcessorException(e);
        }
        Document xml = null;
        try {
            xml = db.parse(new ByteArrayInputStream(html.getBytes(StandardCharsets.UTF_8)));
        } catch (SAXException e) {
            throw new HtmlToXmlConvertionException("Html parsing exception", e);
        } catch (IOException e) {
            throw new HtmlToXmlConvertionException("Html reading exception", e);
        }

Но HTML содержит ноду с неопределенным атрибутом:

<link href="https://..." mask rel="icon" sizes="any">

В этом примере - mask не определен, выбрасывается эксепшн:

Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1442; Attribute name "mask" associated with an element type "link" must be followed by the ' = ' character.

Не могу нагуглить, есть ли способы заставить парсер воспринимать такие ситуации правильно, т.е. считать, что если нет ="", то атрибут с пустым значением? Или все-таки придется еще регекспами искать такое и вставлять это «дефолтное» значение?

 , , , ,

bvn13 ()

На каком языке лучше писать парсеры?

Здравствуйте.

Нужно сделать парсер который сайт очень быстро мог обойти, подскажите на каком языке лучше его писать? Думала на php, но вроде как я понимаю это плохая идея, сможете ещё объяснить мне почему php плох для парсеров?

ОС: ubuntu

 , ,

jessgt ()

На 2018 октябрь - какой самый крутой vim модуль для C++

Что прикрутить к vim, чтобы он стал обладать умениями:

1. Жрет cmakelists.txt

2. Всасывает в индекс все сишноплюсовые файлы проекта

3. Умеет найти определение, все использования функции, класса и т.п. Не хуже clion. Уметь парсить c++11.

4. Заменить имя функции / метода во всех местах и файлах - это уже не обязательно.

5. Короче, главное - сверхкрутое индексирование имен всего, поиск по ним, т.е. чтобы легче копать исходники постгреса.

 , , ,

hlamotron ()

Парсинг работы javascript на html странице через bash-скриптинг

Всем доброго времени суток!

Стоит задача у себя на сервере организовать запись кодов видео со стороннего сайта в файл по крону. Код видео со страницы - это составляющая плейлиста вида http://ip/edge0/xrecord/code_video/prog_index.m3u8

На страницах стороннего сайта код видео в DOM строится разумеется java скриптом.

Какие есть варианты парсинга элементов DOM клиентской части в консоли сервера Ubuntu? Существует ли более-менее простой способ для этого? Обладаю базовыми знаниями php, bash.

 , , ,

RamonNomar ()

Посоветуйте чем в С++ лучше всего разпарсить строку

Может быть есть какая-то библиотека, хотелось бы иметь аналог nsdictionary. Заранее спасибо.

 ,

ECLIPSE ()

Какой тип парсеров лучше использовать для разбора Javascript?

LR (LALR)? LL? Recursive descent? Что-то другое? Нужно, чтобы парсер получился как можно проще.

Я правильно понимаю: нельзя так просто взять и написать грамматику для yacc/bison из-за правила о вставке точки с запятой?

 , , ,

kinkstarter ()

Счетчик трафика

Здравствуйте коллеги.

Есть задача посчитать сколько за указанный промежуток времени было отдано трафиком nginx исходя из запроса.

Например есть запрос

http://mydomain.ru/blablabla/qqqqqqaaaa.html
http://mydomain.ru/uguguggugu/qqqqqqaaaa.html

Нужно посчитать сколько трафика было отдано в сумме скажем за сутки

blablabla = 1024 Mb
uguguggugu = 800 Mb

Подскажите пожалуйста в какую сторону копать. Что сделал я

Я включил что б в логах nginx показывало вес запроса, и пытаюсь считать всякими парсерами, но пока приемлемого результат не получил.

Вообщем буду рад любому совету.

Спасибо

 ,

mkgeka ()

Jsoup обход капчи

Пишу парсер на java с использованием jsoup. Как обойти reCAPTCHA?

 , , ,

nikitosios20031 ()

Jsoup обработка спойлеров

https://www.olx.ua/obyavlenie/mashinka-shveynaya-IDtuoCc.html#0807fb6a1c

Надо через Jsoup достать номер продавца в переменную. Поиск по html странице полного номера результатов не дал. На странице до нажатия кнопки его просто нет. Сделал все, что пришло в голову, не могу вытащить номер. Помогите.

 , , ,

nikitosios20031 ()

Парсер на Java не парсит все что требуется

    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
     
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
     
    public class Main {
    	
    	private static String num;
    	private static FileWriter fw;
    	
    	public static void main(String[] args) throws IOException {
    		
    		List<Article> articleList = new ArrayList<>();
    		fw = new FileWriter("output.txt");
     
    		for (Integer i = new Integer(1);; i++)
    		{
    			System.out.println("Parsing page number " + i.toString() + ".");
    			Document doc = Jsoup.connect("https://auto.ria.com/car/used/?page=" + i.toString()).get();
     
    			Elements h1Elements = doc.getElementsByAttributeValue("class", "item ticket-title");
    			if (h1Elements.isEmpty())
    				break;
     
    			h1Elements.forEach(h1Element -> {
    				Element aElement = h1Element.child(1);
    				String url = aElement.attr("href");
    				String title = aElement.attr("title");
    				
    				Document carPage = new Document("");
    				try {
    					carPage = Jsoup.connect(url).get();
    				} catch (IOException e) {
    					System.out.println("Can not connect to " + url + ".");
    					e.printStackTrace();
    				}
    				
    				String price = "";
    				price = carPage.getElementsByAttributeValue("class", "price-seller").first().child(0).text();
    				List<String> desc = new ArrayList<>();
    				carPage.getElementById("description").child(0).getElementsByTag("dd").forEach(dd -> {
    					if (dd.hasAttr("data-hide")) {
    						desc.add(dd.getElementsByAttributeValue("class", "argument").first().child(0).text());
    					} else {
    						desc.add(dd.text());
    					}
    				});;
    				Elements numElems = carPage.getElementsByAttributeValue("class", "phone");
    				if (!numElems.isEmpty())
    				{
    					num = numElems.first().child(0).child(1).text();
    					numElems.forEach(numElem -> {
    						if (!num.equals(numElem.child(0).child(1).text()))
    							num += ", " + numElem.child(0).child(1).text();
    					});
    					
    					
    					System.out.println("URL: " + url + ",\nTitle: " + title + ",\nPrice: " + price + ",");
    					desc.forEach(str -> {
    						System.out.println(str);
    					});
    					System.out.println("");
    					articleList.add(new Article(url, title, price, desc, num));
    				}
    			});
    			
    			if (i % 10 == 0) {
    				articleList.forEach(carInfo -> {
    					try {
    						fw.write(carInfo.getUrl() + "\n");
    						fw.write(carInfo.getName() + "\n");
    						fw.write(carInfo.getPrice() + "\n");
    						carInfo.getDescription().forEach(str -> {
    							try {
    								fw.write(str + "\n");
    							} catch (IOException ex) {
    								System.out.println(ex.getMessage());
    							}
    						});
    						fw.write(carInfo.getNumber() + "\n\n");
    					} catch (IOException ex) {
    						System.out.println(ex.getMessage());
    					}
    				});
    				
    				articleList.clear();
    			}
    		}
    		
    		try {
    			fw.close();
    		} catch (IOException ex) {
    			System.out.println(ex.getMessage());
    		}
    		
    		// TODO Saving articleList to word, excel, SQL
    	}
    }
     
    class Article {
    	private String url;
    	private String name;
    	private String price;
    	private List<String> description;
    	private String number;
     
    	public Article(String url, String name, String price, List<String> description, String number) {
    		this.url = url;
    		this.name = name;
    		this.price = price;
    		this.description = description;
    		this.number = number;
    	}
     
    	public String getUrl() {
    		return url;
    	}
     
    	public void setUrl(String url) {
    		this.url = url;
    	}
     
    	public String getName() {
    		return name;
    	}
     
    	public void setName(String name) {
    		this.name = name;
    	}
     
    	public String getPrice() {
    		return price;
    	}
     
    	public void setPrice(String price) {
    		this.price = price;
    	}
     
    	public List<String> getDescription() {
    		return description;
    	}
     
    	public void setDescription(List<String> description) {
    		this.description = description;
    	}
     
    	public String getNumber() {
    		return number;
    	}
     
    	public void setNumber(String number) {
    		this.number = number;
    	}
    }

По-разному бывает, но последний раз дошел до 1086-й страницы и остановился. Просто terminated. Запускался из Eclipse, возможно, это какие-то его ограничения, поэтому сейчас пробую вне эклипса парсить, но это займет немало времени. Может, все таки мой косяк, кто знает?

P.S. В Java я нуб, это мой первый проект.

 , ,

nikitosios20031 ()

Надо html парсинг библиотека для C/C++

Ищу простую библиотеку для парсинга html на C. Требуется чтобы выполняла примерно такие спойлеры https://drive.google.com/open?id=0ByqEt4VL5ID7bm10VnRCa194dDQ

и вот такие функции мог выполнять: https://drive.google.com/open?id=0ByqEt4VL5ID7aV9RN3RSWW1hRkE

На С, потому что должен исполняться на виндовом десктопе по клику, а других ЯП, кроме пхп, не знаю.

По сути ищу simple html dom для C

 , , , ,

nikitosios20031 ()

Как это развидить?

Добра всем. Кто как читает xferlog, есть куча логов xferlogN.z, как вообще это развидить

x^ĽO�%G�^_x��^H��l^L����^Q^D��"�g���^K�l��j�Hf��J1+_mf^V��i4^B��^E���b^@�^W^Pv5�@�^]}��7Z��^?*�_<7���{$��*�2��������ۗ��/^?�7�˫�]q�������7gߜ_|���ۋ3���n��jӝ��^G�M]n~,.nw���ˢږ�/��/�=���-�S|�/^O�^��ݽ��$
�j^?_����ˢ\��^G��^Vo6������_}��n�_�^?.>�7��p^B~�9{q�����/w�g�g��^?����������^?����O��O^?���������۟}R��^Wۮ!i���qW�^U�� �ۏ
^V���C^@^O^?(�g��?^U^LL^[aBu��P^BۑN�3�w�ov^^^B  ��"8I��7t��6�^MW3Lj��6^S��Ňϝ��㻷��^?sK*��7g�H��}�^Y:��e��/�˦�<�/�K��s6��g^?��~�����{0~���O����nw�������w^[:ms��4u9^Xw�9^@^K�L�#U*�-����������ihg����$
�����?����0��ډ����=X�^C����W_ܼ�o.��g�Y�i���H�v���>� �<�v6A^VJ����W�;~�m�m�=�l詑H�<��C^Z����^B^R\"3�O^P�^H���     �a��##v^W���ݟ^P��^[�^HG0^?^_�����n^?�7H^NB%�(�_���w^WY��@�^Da ����/.^?uy�^Z�_�+�^D��$
��C����9k�ߔ]Wq*Oo2Z{^Fo�^Y��^T����7o�Ro^R^Dd'_^O%)Un�^CI^A�=��^?�����B6��ϥ
P��^^Je`�m���L������ߟ^?��9���^]����^Wݒ��e<�V>z�߂�^O�R����e��M��:^Q^\s���︩�3:��(Xa��<^@?�^H^[�E|��W=_��ۊ�^XL^Y�^O�*�AI�^^^NX�V몢^D!#�^O�*��ɫb^E'�W�da({^Nә�\^TS ����^L�^@���j
��f�ѭ��_�2^Y9_�r^Gy��,4�;��Z�$S~��K�^T�^S��vϝ�奉���E�ڞ���GO����- ]@Ѳ�[Ϧ,λͲ1��ۙ�^P�fܴXx^N�܁5�����$)�/�$���x^W�\,#MB��^L^Go�2�D�4W��뱧�l��^]��a%�r��.�"�    ��u�r�F.�jrWY��7v^Yd8��^[�^Q�<^[�XYe^YXMUu+-$
�p��Ά�7n7��:�8�^[��G�^G�n���a���]�:���8,v^Y�R-}'��ZA�^B^Fނ�.�^Ex��<�^_�,'2I���ܐ�-�;�^R� ��|�^VrU��\]@^Q��cu�^\���\�W|EG��#��^PY^Ms���%]'�֪�(��^V�%�k^F���O��^WvyI�K�^Tnf63��b[^]�I��^R/3��d��^AU^~���$
^KJ�|k�VN��^_�%88^Y^VX��c�"}���r����-g�j��1��t�&an�֚�N^Y�^D]?�nyp^E^]��^R�^Y���a��^G�x^@��4^^1,�*]��\Y�����+�    ^?��^BN%L�7^W�M8����^T^F+þ��-%]~]Rr٦�q��ikr�;g�dC��^@M�%��;�|^D~�����ߠJ�f��"]^\U����$
o�^O�M8q�je�����t�X^E49/^Y���r�Xcm���=�^U�m���p�U��^V^?ʘ��^V^?v�a�=Ev�^C��^^8�
9��_z|F^_���z��w��������1e�^T�r�O����.�^H�'�Cs�`^Q�T^D�y^HU�^E}Z��!;^WϝJ�^H�' ^Y��}@^_^G^F60}�^_�^NN�^N2ӷ.EB�"-^AU^Oʗ�i��h�W��9^Z��s˘Cl';��^G�6���V^P��^E��;E�t4�N��^T�������Ω�[tZ�4�.^U^Y^Q
�ˇ�^H����{�nq�� ~^Q;��<�x��xN���f^X�e�^P�Wh��^F�3=E����H��o�r+�G����^F�Cn�$^E�
�a����mN�G^Q�W�N�^F�C�Q�^/�z�]����9{Q��+*�^?H�W�e�0�^ZMQEn'<N�<^Z��^^�^T=1kt2^W^M<�"\���W2��.�^H�'�Ĝ^C�^\�ن�^]2h�i�+��\L^O(j�^^�a�w^@ԝ�^N��.^L�j^W�q1��W�0�^He^D����6�EM.��\<G�.ö��|���v���^FA�`�`��$
�#5��t��G��ta`�v��.�v,�v��.~g^W�?�ۋ^Ll`:��U�wv�(�^_S���l���U�^O�:�!��c�J�#�K�N^V��^V�2�^BD��5�K�^X��<�$�1J����^K��^X���v�$<��yS��t@j��J.A^G^U�^Q b^RV�n
`H�^Q��b���m$   �^Tt%*M��f�Ή�^V�^N�Js���6�1�^H�Q|�^T    ���!lD�^C^Lu��\�^Ed���im��0�6 녦���#�q��d�������i_�97@ݚ���&`�dDtb$^N�vx^]���^X^?��j��;%*M�^F�^C^\^āܝ^X�QF0�o2����t��8�J&���R^M�.{!�^C���+��$
J^S�~�^W<^S@b�^P��^N/Ix�=�^D�(��l0Z�^A(�^T^P��_�$�n|p��L�^s�^@}i��K^B֯�)F^Lݹ�^N
��U:�əߣ^E^C^[�^NQ��^K�$�"���=��^G �!���q#Ix$ϕ�Q��^G��p6<G���^H���^ZEō(�U�����{�"`U�^H���.��G�^_�� ޟ�����(z]��iu^S��\,Gݢ��^U��^F�M^W^F6�9�5*���tT^@���Y���6CX.�+�x�z�RI��=^]�WsԈ�^F5���^NH��_��uP����$
^B6�^\�v) PF�\��^U`/^Z��I\^@)��+�^T�^[�����t�;^@J�^_]|%^W�a��R�UV�]�^Yؠ\^P�^W<�'o�.�-P?^@���y^Q�?��1^X^\^@S�^Q^G4w��dU�颸�^B^^����%�^N1ѧ_ɥ]`&�҅�n^C^Z_0��]^Pm^X�͈��"^S��Ώ�O�^R1B�^[%nAL���]��8��Tw�M^W$
���L#^K�^QO#Aw.��t��K'���N?^@��^Nq�?U^[e�=J�^Q�L��.��T��^^�+[^B6p^]�N^W�g�u�;�VK_F{�n=^R��됻��2���(x^U����ڗ�    �@��^F�C���A^L��H�+��(0h�^D�^Ll�:"m��^_�8B��V�Z^[���E^A�cǢ�^Qa�:��#�KQY��^R�^@w7f�^Q$
�!�.���^<B^Y�t^?#�����it^@VE�^A�����ލ�^He^Dו^L�rۛ^U^L9�{]�PF^R�A*��K�Q��F        MSݹ����^FQG^X���\LG����ߝN�[V��0��fŀp�����9�^GF�^L�jƀ��^Ll^Pt�3]Н��(gz�^T���t�0�*�^^R ^H�z^[5J2^@٦v�B���C*�^Dٙ�^\�
�(�G)7��^D(^X��t�/]Н���֣^MY־�^Q��%^P.W.S�s�^\�Jo��^KN�7k^WSE��^X����G^E��^Z]���B:2^R�A� ^\��^Z�S���^Y^]���^XeB�^X�Ө%`^C�^Q��M�ʺ#�˙�Tֵ�hW/^L�3^]RZ un^Y$^]VZ�h�G��ji�1BX�{�`�^@�^R^_�{^ZEg�I^O�^FQ�8^�G$
X0�~�B�v���^�PFH���E��f���u^M�^@=�jW|%�~A�v��h�L������i��^FQG�v �s1^]^U^_��A�^Y�7M����^F�C����Q��H���}�wb��mj#�b��:��(�^OJ|^T?�N`\�t��<��^He^D�JF^]^Y�更d`U�^L�i��+���r�^NJ�.�?�;^Y^Y��tDN��;^W�Q9u�$
3<Fa���� ���a�^R�.萮Ƃ�L*}Jx��>j�����^\5*^YX��@�X��W�p�^He^D��^@iS^G^T�2��鈶�c���G(#���K��c^\!3_�WrI:�d^\������^Ba��d^_�!^H���Jˑ���^\)^Yؠ^^P.�qZm�K�Q.�Q��E{^^D�^HI�>�N^P^^)�JJ]@�KA6�A�^QO�q^Z��%���$
I�J���S��^L^E^C^[����   �s1^]���R���J/Z��o`:���^?^@���\��PJ^Y��^^��RiK�b�^QCw.IGe��JL�,��^\�;^@^[D^]b��^OJ^K^ř/JP���2�^H�^AX�:����?,}�r�A��z�4̲^NP0^L�1]b�НE�H�cD�������^Eb^U���^M\^G��I�sq^]�SG�+�^@$
� �^Ll`:��E^\�ݽ�^X�r�+]v)91�"%`��S�^X�3��nc�^H��vz��]/^E^C^[�>���;^W�A#��E��^8^\d���ؑ�^X��ܳ^Y%�q�#���^Y^C��^X� �^P^?W�6��t��K^KM�^A����^ML^G���^C�^]^.ʈc��^D^L]i�:Bo����E�!=��^O?^Y=^��4^Q�7�^S،�ش�;�M
�M�[������vQg`]� �H%ᙸ��#%^W�b4V���^Z0��+u�.P. �+y�~�2�x���^Z^B|^^L��:I�^G}��;^W�A�u$���t^L�X��^F�#|^��\L^GU�^Qӕ�R�̗����^W�0Bг��^D���GOq���5�I��7�.�^Q�ߣ^B�r�g��Y
�#y��G�����e`]� �`^R^G^\OH��#�(#$��|iz{�t��^F�#BG�9��qt�2���d�zۛ^MƂ�^MLG8_���^YI�QΗR��B�!%�^Q�^W��L�˔�H���^����%^A^[^D^]b/揑�.�^H���^Wۀ^PiA�^F�#B��w�_��</�����:E�^K�``�鈆���;�vA5|%��.^@�^Hu�p���0^O$
^F֕^K�k^Z1=���^He��+��)��l�s��n�W��i���*^]�J�^TW:�^S�{�^X� �^H_��;�~^A��!����������^M<G<�^Dٹx�z^Z=�*O�^A��]��^D�3^]R�!���tX^QF���#{�>���^MLG^Ta^H�s1^]U�Q)^A^L��^W
< j��Wr�^\4��X�����t�p�͕?~!^H��HWJ       F�^G4^_e`�r��.�K0^D�"��O^C�^G�*H^A��J.���^Z�~�^_��3�ѡ�_�^E^A^[�^\b.f�RGj^Xf.j�ӆ^@˅�!^LL�xҟ^Tz�J�#�^K����/�f�C@��#`E�^]�^X�sh^W��^H��_R��^L^A��K^B60=^�8t�b:F$
#f����T��QO�^FI��vq���tL�.^S��u�yNi]^V�#�QAv.��������BݐiF�>͈6^Y0���J&���^Z3��^D�^Pӥ2<F^E���h�I�^N��nQ%3�^R�Fs^[�^C���!��:���^He��(c/�^@#��z^M<�h��n�^Z�v���ѡ5^KzQ^R��tHҨ�;�J�y^@j%i^T^^�^V^H����^U���$
j�ݶ����=�>����Y�n^D     o���~}u��j���ˏ7��'����O��������W��w��g�Wߜ}s~����o/���r��n�MwV�g/���^Wg/^?|������f���e��wï�����妸�k_��� ^Vp�^?��^W7���ݧ����o����_ί�^S^Fxq~��^@��

 ,

julixs ()

Ещё один экзотический формат сериализации. Как бы вы это парсили?

Доброго времени суток

IBM, родина велосипедов

Вот кусок вывода «lsyscfg -r prof -m $server» с hmc

affinity_group_id=none,
"io_slots=21010284/none/1,21010204/none/1,21010205/none/1,2101028D/none/0",
"virtual_eth_adapters=""72/1/1/704,706,744,714,715,700/1/0/ETHERNET0//all/none"",73/0/199//0/0/ETHERNET0//all/none,74/0/714//0/0/ETHERNET0//all/none",

на строки разбил я, чтобы было понятнее. В выводе утилиты всё это в одной строке слитно, без пробелов

Видны минимум три уровня:

  • на первом уровне параметры разделены запятой
  • на втором уровне ( если в значении параметра есть отдельные элементы, разделённые запятой ), вся пара key=value заключается в кавычки
  • на третьем уровне ( если в параметре есть элементы, разделённые запятой, которые в свою очередь разделены на подэлементы, также запятой ), подэлемент заключается в двойные кавычки

Насколько я понимаю, обойтись лямбдами не получится, придётся перебирать всю строку по символу, учитывая на каком уровне сейчас находишься.

Есть идеи лучше? Или может это не велосипед, а более-менее стандартный формат и есть готовые библиотеки?

 

router ()

Существуют ли готовые модули/скрипты для парсинга сайта и его статики по директориям? (python)

Сабж. Инересует именно код, который мог бы парсить все страницы относящиеся к домену и статику для этих страниц (js,css)
Есть ли что то готовое?

 ,

foozzi ()

Python парсинг <yandex:full-text>

Доброго вечера! Столкнулся с проблемой, как парсить <yandex:full-text> ?

d = feedparser.parse(link)
        for e in d.entries:
           print e.link
           print e.yandex:full-text #такой вариант естественно не работает

Какие есть варианты/предложения?

 , , ,

BladzheR ()

Как и чем распарсить такой сайт для получения ссылок на картинки

Есть сайт Метрополитан-музея с выдачей картинок, там немного по-хитрому, в html'е картинок не видно:

http://www.metmuseum.org/art/collection#!?perPage=20&geolocation=Mexico&a...

Но их можно узнать, ссылки и названия типа:

http://images.metmuseum.org/CRDImages/ao/mobile-large/DP229188.jpg
Мне важно узнать из выдачи конкретной страницы все вот такие DP229188.jpg, я смогу их потом выкачивать полноразмерными просто изменив ссылку на:
http://images.metmuseum.org/CRDImages/ao/original/DP229188.jpg

Есть также ссылки на выдачи постранично, которые можно скормить парсеру или что там будет получать ссылки на картинки, вот такого типа:

http://www.metmuseum.org/art/collection#!?geolocation=Anatolia&showOnly=withImage&offset=20&pageSize=0&sortBy=Relevance&sortOrder=asc&perPage=20

http://www.metmuseum.org/art/collection#!?geolocation=Anatolia&showOnly=withImage&offset=40&pageSize=0&sortBy=Relevance&sortOrder=asc&perPage=20

http://www.metmuseum.org/art/collection#!?geolocation=Anatolia&showOnly=withImage&offset=60&pageSize=0&sortBy=Relevance&sortOrder=asc&perPage=20

Чем можно пропарсить такую выдачу, например gem какой-нибудь или модуль для node или еще что-то, подскажите пожалуйста.

 , , ,

Bruce_Lee ()

Как пустить headless браузер через определенный сетевой интерфейс?

Собственно надо парсить сложный сайт. Поэтому решил использовать headless браузер. Phantom.js. Собственно управлять всем этим надо из Node.js, поэтому тут еще и Casper.js + Spooky.js
Но парсить надо с разных сетевых интерфейсов (tunX - OpenVPN)
Когда был просто request, там был параметр localAddress, в котором прописывался ip адрес интерфейса и всё.
Но как заставить ходить не напрямую Phantom.js? Ну или Firefox через Slimer.js (Casper.js и его поддерживает)

Собственно вот пример с сайта. Работает. Но как тут указать сетевой интерфейс?

var Spooky = require('spooky');

var spooky = new Spooky({
        child: {
            transport: 'http'
        },
        casper: {
            logLevel: 'debug',
            verbose: true
        }
    }, function (err) {
        if (err) {
            e = new Error('Failed to initialize SpookyJS');
            e.details = err;
            throw e;
        }

        spooky.start(
            'http://en.wikipedia.org/wiki/Spooky_the_Tuff_Little_Ghost');
        spooky.then(function () {
            this.emit('hello', 'Hello, from ' + this.evaluate(function () {
                return document.title;
            }));
        });
        spooky.run();
    });

spooky.on('error', function (e, stack) {
    console.error(e);

    if (stack) {
        console.log(stack);
    }
});

/*
// Uncomment this block to see all of the things Casper has to say.
// There are a lot.
// He has opinions.
spooky.on('console', function (line) {
    console.log(line);
});
*/

spooky.on('hello', function (greeting) {
    console.log(greeting);
});

spooky.on('log', function (log) {
    if (log.space === 'remote') {
        console.log(log.message.replace(/ \- .*/, ''));
    }
});

 , ,

Qwentor ()

SyntaxError: Unexpected token ' in JSON at position 32. Почему?

Есть строка такого вида:


[10035,1,[[1,[[1,11871,[2065165,'\u0412\u0435\u0441\u0442\u0435\u0440\u043D \u0421\u0438\u0434\u043D\u0435\u0439 \u0423\u043E\u043D\u0434\u0435\u0440\u0435\u0440\u0441','\u0421\u0438\u0434\u043D\u0435\u0439','1.009-E005217021802',6,'02/18/2017 16:50','',1,0,1,2,{126:[1,1]}],[3,1,41,45,0,0,{126:[1,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],310:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],309:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],308:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],307:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],306:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0]},,{1:45,2:45,3:15,4:15},0],[[17,17,[]],[33571008,[1,0,1,1,12000,-0.50,2059220],[1.95,1.97]],[33571009,[1,0,1,1,6000,-0.25,2059220],[2.33,1.67]],[33571014,[5,0,5,1,3000,0.00,2059220],[1.96,2.98,4.30]],[33571022,[1,0,1,1,4000,-0.75,2059220],[1.68,2.31]]],2],[1,19097,[2070863,'Heidelberg United','Avondale FC','1.030-E007717021802',10,'02/18/2017 16:30','',0,1,1,,{}],[1,0,0,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[3,3,[]],[33665916,[1,0,1,1,3000,0.50,2071489],[2.07,1.83]],[33665920,[5,0,5,1,500,0.00,2071489],[4.70,2.91,1.83]]],1],[1,7256,[2073815,'Souths United','Rochedale Rovers','1.032-E008717021805',10,'02/18/2017 17:00','',0,0,1,0,{}],[1,1,31,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[0,0,[[1,0,1],[5,0,5]]]],3],[1,7256,[2073813,'Ipswich Knights','Albany Creek','1.032-E008717021803',10,'02/18/2017 17:00','',1,0,1,0,{}],[1,1,36,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[6,6,[]],[33717500,[1,0,1,1,2000,-0.25,2078167],[1.90,1.94]],[33717504,[5,0,5,1,500,0.00,2078167],[1.66,3.60,4.20]]],2],[1,7256,[2073814,'Grange Thistle','Mitchelton FC','1.032-E008717021804',10,'02/18/2017 17:00','',1,0,1,0,{}],[1,1,34,45,1,0,{},,{1:45,2:45,3:15,4:15},0],[[6,6,[]],[33717508,[1,0,1,1,2000,-1.00,2078168],[2.04,1.80]],[33717512,[5,0,5,1,500,0.00,2078168],[2.62,2.99,2.48]]],2],[1,7256,[2073812,'Logan Lightning (n)','Eastern Suburbs FC','1.032-E008717021802',10,'02/18/2017 16:00','',1,1,1,0,{}],[1,2,35,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[4,4,[]],[33717492,[1,0,1,1,1000,-0.25,2078166],[1.45,2.63]],[33717496,[5,0,5,1,500,0.00,2078166],[6.00,1.51,3.45]],[33717498,[1,0,1,1,2000,0.00,2078166],[2.66,1.44]]],3],[1,24374,[2071853,'Adelaide United U21','Adelaide Olympic','1.033-E009217021804',10,'02/18/2017 16:30','',0,2,1,0,{}],[1,2,5,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[3,3,[]],[33686507,[1,0,1,1,2000,-0.25,2073198],[1.92,1.92]],[33686511,[5,0,5,1,500,0.00,2073198],[23.00,6.00,1.099]]],2],[1,44064,[2066059,'Bali United Pusam','PS Barito Putera','1.089-E072417021801',6,'02/18/2017 16:00','',1,1,0,0,{}],[1,2,33,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[3,3,[]],[33593355,[1,0,1,1,2000,0.25,2061253],[2.04,1.80]],[33593358,[5,0,5,1,500,0.00,2061253],[2.57,1.93,4.70]]],1],[1,228,[2065819,'GrIFK Kauniainen (n)','HJK Helsinki','1.026-E022017021801',10,'02/18/2017 17:00','',0,1,1,0,{}],[1,1,37,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[6,6,[]],[33587489,[1,0,1,1,2000,-1.50,2060809],[2.13,1.78]],[33587493,[5,0,5,1,500,0.00,2060809],[65.00,8.50,1.035]]],2],[1,31224,[2072986,'Kitchee','Tai Po','1.082-E068317021802',10,'02/18/2017 17:30','',0,0,1,0,{}],[1,1,9,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[4,4,[]],[33704744,[1,0,1,1,500,0.75,2076378],[1.71,2.05]]],1]],[],[]]]]




При попытке JSON.parse получаю следующую ошибку:
undefined:1
[10035,1,[[1,[[1,11871,[2065165,'\u0412\u0435\u0441\u0442\u0435\u0440\u043D \u0421\u0438\u0434\u043D\u0435\u0439 \u0423\u043E\u043D\u0434\u0435\u0440\u0435\u0440\u0441','\u0421\u0438\u0434\u043D\u0435\u0439','1.009-E005217021802',6,'02/18/2017 16:50','',1,0,1,2,{126:[1,1]}],[3,1,41,45,0,0,{126:[1,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],310:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],309:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],308:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],307:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0],306:[0,1,41,45,0,0,,,{1:45,2:45,3:15,4:15},0]},,{1:45,2:45,3:15,4:15},0],[[17,17,[]],[33571008,[1,0,1,1,12000,-0.50,2059220],[1.95,1.97]],[33571009,[1,0,1,1,6000,-0.25,2059220],[2.33,1.67]],[33571014,[5,0,5,1,3000,0.00,2059220],[1.96,2.98,4.30]],[33571022,[1,0,1,1,4000,-0.75,2059220],[1.68,2.31]]],2],[1,19097,[2070863,'Heidelberg United','Avondale FC','1.030-E007717021802',10,'02/18/2017 16:30','',0,1,1,,{}],[1,0,0,45,0,0,{},,{1:45,2:45,3:15,4:15},0],[[3,3,[]],[33665916,[1,0,1,1,3000,

SyntaxError: Unexpected token ' in JSON at position 32
    at JSON.parse (<anonymous>)
    at /home/slava/parsers/sbobet.js:28:13
    at done (/home/slava/parsers/node_modules/needle/lib/needle.js:398:14)
    at PassThrough.<anonymous> (/home/slava/parsers/node_modules/needle/lib/needle.js:637:11)
    at emitNone (events.js:91:20)
    at PassThrough.emit (events.js:186:7)
    at endReadableNT (_stream_readable.js:974:12)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Второй день не могу врубиться. Что не так?

На pastebin: http://pastebin.com/MLew8QeR

 , ,

Qwentor ()

Parser combinators и LL(2)

Здравствуйте!

Можно ли совместить LL(1)/LL(2) парсеры и parser combinators?
Или это невозможно?

Насколько я понимаю, допустим, LL(2) парсер имеет lookahead = 2, т.е. он может смотреть на 2 токена вперед (кстати, что есть токен в данном случае - один символ или именно целый токен?).
Это сильно ограничивает backtracking (нельзя, например, прочитать 10 токенов, подумать, а потом откатиться назад).
А без backtracking'а по сути не будут работать многие parser combinators, да? Например, комбинатор `and`: допустим, он распарсил успешно 5 токенов, а на 6м зафейлил, следовательно, вся цепочка должна зафейлиться, но откатить 5 токенов мы уже не можем.
Или parser combinators являются LL(infinity) парсерами?
Можно ли сделать parser combinators поверх потоков (streams)?

 ,

kovrik ()

Как проверить целостность получаемой страницы?

Как проверить целостность получаемой страницы? Нужно для парсера - проверять скачалась ли страница полностью или только кусок. Есть ли что-то штатное для этого? Пользуюсь node.js, страницы загружаю с помощью модуля request.
Страницы есть двух типов - обычные html и json. Надо проверять на целостность и то и то.

P.S. Как вообще «целостность» по-английски в данном контексте?

 , ,

Qwentor ()