|
гуру. подскажите где почитать про парсинг сайтов в 1с :) | ☑ | ||
---|---|---|---|---|
0
zladenuw
12.11.13
✎
22:19
|
есть некий сайт. нужно на него залогинится и отправить запрос на поиск артикула. а результат загрузить в тз.
поставил програму fiddler2. На сайт логинюсь. отправляю пост на поиск. но результат пустой. дайте направление. спасибо |
|||
1
Мизантроп
12.11.13
✎
22:23
|
||||
2
vde69
модератор
12.11.13
✎
22:24
|
запросы не обязательно пост, бывает гет и еще есть пара специфических...
давай адрес сайта :) |
|||
3
zladenuw
12.11.13
✎
22:29
|
(1) спасиб. буду изучать.
(2) http://shop.armtek.ru/ |
|||
4
zladenuw
12.11.13
✎
22:35
|
вот это обязательно прописывать. я в этом 0. и пока не понимаю зачем оно нужно
Соединение.SetRequestHeader("Host", "shop.armtek.ru"); Соединение.SetRequestHeader("Connection", "Keep-alive"); Соединение.SetRequestHeader("Content-Length", РазмерФайлаОтправки); Соединение.SetRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01"); Соединение.SetRequestHeader("Origin", "http://shop.armtek.ru"); Соединение.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"); Соединение.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded; Charset=windows-1251"); Соединение.SetRequestHeader("Referer", "http://shop.armtek.ru/"); Соединение.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); Соединение.SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch"); |
|||
5
NIkitos91
12.11.13
✎
22:38
|
(0) Попробуйте имитировать интерактивную работу через IE Application или поле HTML документа (что в принципе одно и то же)
|
|||
6
zladenuw
12.11.13
✎
22:45
|
да мне вообще суть понять. как и что за чем. а то как новый лес. хз куда иди, что смотреть. всегда старался обходить стороной веб. а тут надо сделать :)
|
|||
7
vde69
модератор
12.11.13
✎
22:45
|
он использует определение сесии, скорее всего это носок, по этому тебе нужно работать через ОДНО соединение, не прерывая его. Ну и соксы разреши :)
|
|||
8
zladenuw
12.11.13
✎
22:53
|
(7) так, так и есть в обработке. но при этом если смотреть через фиббер. все равно другой сенд. чем когда через сайт захожу и начинаю поиск. а что такое соксы ?
|
|||
9
NIkitos91
12.11.13
✎
22:56
|
(6) В общем мое предложение Вам:)Создаете ком-объект Ie Application. У него есть методы, которые позволят перейти на нужный сайт, обойти dom, заполнить нужное, вызвать методы-обработчики кнопок.
То есть как бы работа будет не на уровне запросов, а на более высоком уровне что-ли:)Более привычно. |
|||
10
NIkitos91
12.11.13
✎
22:57
|
(9) Единственный минус - поменяли структуру сайта, полезли ошибки.
|
|||
11
zladenuw
12.11.13
✎
22:57
|
(9) (10) я понял. но дали вот заготовку и сказали должна взлететь. так что пока вариант номер 1, но буду иметь на заметку
|
|||
12
Asmody
12.11.13
✎
23:00
|
(11) не надо так (9) делать
|
|||
13
zladenuw
12.11.13
✎
23:01
|
(12) а как надо делать ? направите ?
|
|||
14
oleg_km
12.11.13
✎
23:08
|
ну в конце концов, дайте кому-нибудь за деньги. Потом посмотрите как сделано и будете продолжать так же. А так бесполезно выпрашивать на форуме по каплям информацию. Или на инфостарте найдите похожую обработку и посмотрите как сделано. Тогда появятся конкретные вопросы, с ними реально помогут. А так вот с нуля и все подробно рассказать и ночи не хватит
|
|||
15
zladenuw
12.11.13
✎
23:10
|
(14) да верю что не хватит. по немного но понимаю.
теперь понятно зачем дублировать (4) для каждого сенда. http://www.phpclub.ru/detail/article/http_request |
|||
16
Asmody
12.11.13
✎
23:15
|
(13) HTTPСоединение.post() и не надо ни каких извращений с ИЕ
|
|||
17
zladenuw
12.11.13
✎
23:22
|
(16) сейчас использую вот так
Соединение = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); Скрипт= Новый COMОбъект("MSScriptControl.ScriptControl"); Скрипт.language="javascript"; Скрипт.AddObject("WinHttp", Соединение); Скрипт.Eval("WinHttp.Option(2)=1251"); через HTTPСоединение проще ? |
|||
18
Asmody
12.11.13
✎
23:52
|
(17) нативнее
|
|||
19
zladenuw
13.11.13
✎
00:03
|
ответ сервера приходит с такими символами ‹, не копирует даже. как узнать какую кодировку нужно установить ?
|
|||
20
Asmody
13.11.13
✎
00:04
|
(19) json там приходит в utf-8
|
|||
21
zladenuw
13.11.13
✎
00:09
|
(20) то получается мне нужно отправить в такой же кодировке ? или как мне получить в нужной. что бы не отображались кракозябры
|
|||
22
Asmody
13.11.13
✎
00:31
|
(21) на выходе HTTPСоединение.post() получается текстовый файл, который прекрасно открывается самой 1Ской
|
|||
23
НаборДанных
13.11.13
✎
00:41
|
||||
24
zladenuw
13.11.13
✎
00:42
|
(23) спасибо но не то.
|
|||
25
zladenuw
13.11.13
✎
01:02
|
сделал вот так
Соединение = Новый HTTPСоединение("shop.armtek.ru"); параметрыПост = "login=" + СтрЗаменить(Пользователь, "@", "%40") + "&pass=" + Пароль + "+&remember=false"; ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt"); Соединение.Получить("http://shop.armtek.ru/authorization?"+параметрыПост,ИмяФайлаОтвета); вернуло такую хрень. {"title":"\u041e\u0448\u0438\u0431\u043a\u0430","body":"","code":"1"} |
|||
26
zladenuw
13.11.13
✎
01:09
|
(25) а все разобрался использовал HTTPОтвет
Теперь другая проблема. после авторизации. есть переход на форму где надо выбрать значение. вот как быть с ним ? сейчас делаю вот так параметрыПост = "VKORG=5210"; HTTPОтвет = Соединение.Получить("http://shop.armtek.ru/setvkorg?"+параметрыПост,ИмяФайлаОтвета); и ошибка 302. или тут надо по другому ? |
|||
27
miron25
13.11.13
✎
01:21
|
(26) Каталог АРАГОНА-это что все артикулы и товар?Может скачать каталог товаров ?
|
|||
28
zladenuw
13.11.13
✎
01:21
|
{Форма.Форма.Форма(23)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
HTTPОтвет = Соединение.ОтправитьДляОбработки("http://shop.armtek.ru/setvkorg?"+параметрыПост); по причине: Неправильный путь к файлу с какого дуба ? или что нужно передать в httpЗапрос ? |
|||
29
zladenuw
13.11.13
✎
01:23
|
(27) качать не надо. нужно пройти авторизацию и получить нужные данные. и выйти.
|
|||
30
zladenuw
13.11.13
✎
01:24
|
и блин. почему в Сп описан только 2 параметра. если в примере задают 3. это как ?
Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, РесурсНаСервере, ФайлРезультата); |
|||
31
Asmody
13.11.13
✎
01:25
|
(28) Обратись к ДенисЧ, он регулярно тут СП распродает
|
|||
32
miron25
13.11.13
✎
01:27
|
(31)Я вчера обращался.Говорит закончились на прошлой неделе,а когда завоз не знает.
|
|||
33
Asmody
13.11.13
✎
01:28
|
(32) Тяжело теперь одинесникам будет, нельзя одинеснику без СП
|
|||
34
zladenuw
13.11.13
✎
01:33
|
получаю в файле такую штуку.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Armtek - запчасти для грузовых и легковых автомобилей, оборудование для СТО</title> <link href="/css/main.css" rel="stylesheet" type="text/css" media="screen" /> <link href="/css/shop.ezet.ru.css" rel="stylesheet" type="text/css" media="screen" /> <script type="text/javascript"> это че такое ? |
|||
35
miron25
13.11.13
✎
01:34
|
(30)Там пост запрос.И судя по всему как там расположены результаты,да и еще на нескольких могут быть страницах.Что то подсказывает.что не все просто так,изучай dom в 1с,в общем гимор,лучше заплати кому нибудь...Хотя надеюсь,что я ошибаюсь.
|
|||
36
zladenuw
13.11.13
✎
01:34
|
сделал вот так. намного проще блин :)
Соединение = Новый HTTPСоединение("shop.armtek.ru"); параметрыПост = "login=" + СтрЗаменить(Пользователь, "@", "%40") + "&pass=" + Пароль + "+&remember=false"; HTTPОтвет = Соединение.Получить("http://shop.armtek.ru/authorization?"+параметрыПост); Если HTTPОтвет.КодСостояния <> 200 Тогда Сообщить("ошибка"); Возврат; КонецЕсли; параметрыПост = "VKORG=5210"; HTTPОтвет = Соединение.ОтправитьДляОбработки("http://shop.armtek.ru/setvkorg?"+параметрыПост,,); Если HTTPОтвет.КодСостояния <> 200 Тогда Сообщить("ошибка"); Возврат; КонецЕсли; ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt"); параметрыПост = "searchQuery=" + Артикул + "&searchType=1"; HTTPОтвет = Соединение.ОтправитьДляОбработки("http://shop.armtek.ru/search?"+параметрыПост,,ИмяФайлаОтвета); Если HTTPОтвет.КодСостояния <> 200 Тогда Сообщить("ошибка"); Возврат; КонецЕсли; Или что то не так делаю ? |
|||
37
miron25
13.11.13
✎
01:35
|
(34)Это скрипты и подключаемые каскадные таблицы.
|
|||
38
zladenuw
13.11.13
✎
01:36
|
а зачем они мне :).
правильно ли я понимаю что если код 200. то все ок или нет ? |
|||
39
miron25
13.11.13
✎
01:36
|
(36)Да подключиться,то не проблема.Результат получить и вытащить оттуда в ТЗ,вот где загадка.
|
|||
40
zladenuw
13.11.13
✎
01:38
|
я несколько часов назад и это не умел. и это было для меня загадка.
такс как мне понять. что передавать для поиска ? нужно править заголовки ? или нет ? |
|||
41
miron25
13.11.13
✎
01:38
|
(38)Советую скачать каталог xls у них на сайте...и делай с ним что хошь.
|
|||
42
Asmody
13.11.13
✎
01:38
|
(34) Это html, старина, просто html...
|
|||
43
zladenuw
13.11.13
✎
01:39
|
(41) еще раз читай (29)
|
|||
44
zladenuw
13.11.13
✎
01:39
|
(42) ясно. значит мой пост ушел хз куда.
|
|||
45
miron25
13.11.13
✎
01:40
|
(43)Читал ...но советую..
|
|||
46
zladenuw
13.11.13
✎
01:41
|
(45) надо программно зайти, найти, получить, выйти :)
|
|||
47
miron25
13.11.13
✎
01:43
|
Тут один тоже задавал,недавно задачу похожую такую..Но в ветке много было людей...а он так и ждал помощи.Что то наверно и здесь так будет.
|
|||
48
Asmody
13.11.13
✎
01:43
|
Имей ввиду, тебе из кук понадобится ci_session и session_id если есть. Куки можно в HTTPОтвет посмотреть
|
|||
49
zladenuw
13.11.13
✎
01:44
|
так я прощу подсказки,а не готового решения. может я делаю что не так.
|
|||
50
zladenuw
13.11.13
✎
01:44
|
(48) да видел я их там. нужно их в постзапрос добавлять ?
|
|||
51
zladenuw
13.11.13
✎
01:59
|
правильно ли я делаю 2 пост к серверу сайта ? мне нужно туда передать значение.
|
|||
52
badboychik
13.11.13
✎
02:30
|
можно в Firebug посмотреть что передается при отправке данных, когда вручную все вводишь
|
|||
53
zladenuw
13.11.13
✎
02:39
|
(52) так фидлером смотрел. да сейчас разбираюсь. оказывается. я даже не проходил авторизацию на сайте. так что читаю как правильно сделать
|
|||
54
zladenuw
13.11.13
✎
02:43
|
вот так правильно писать POST запрос к серверу ?
Соединение = Новый HTTPСоединение("shop.armtek.ru"); ИмяФайлаОтвета = ПолучитьИмяВременногоФайла("txt"); параметрыПост = "login=" + СтрЗаменить(Пользователь, "@", "%40") + "&pass=" + Пароль + "+&remember=false"; ЗаголовокНТТР = новый Соответствие(); РазмерФайлаОтправки = XMLСтрока(СтрДлина(параметрыПост)); ЗаголовокНТТР.Вставить("Host", "shop.armtek.ru"); ЗаголовокНТТР.Вставить("Connection", "Keep-alive"); ЗаголовокНТТР.Вставить("Content-Length", РазмерФайлаОтправки); ЗаголовокНТТР.Вставить("Accept", "application/json, text/javascript, */*; q=0.01"); ЗаголовокНТТР.Вставить("Origin", "http://shop.armtek.ru"); ЗаголовокНТТР.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"); ЗаголовокНТТР.Вставить("Content-Type", "application/x-www-form-urlencoded; Charset=windows-1251"); ЗаголовокНТТР.Вставить("Referer", "http://shop.armtek.ru"); ЗаголовокНТТР.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"); ЗаголовокНТТР.Вставить("Accept-Encoding", "gzip,deflate,sdch"); authorization = Новый HTTPЗапрос("http://shop.armtek.ru/authorization?",ЗаголовокНТТР); authorization.УстановитьТелоИзСтроки(параметрыПост,КодировкаТекста.UTF8); HTTPОтвет = Соединение.ОтправитьДляОбработки(authorization,,ИмяФайлаОтвета); |
|||
55
badboychik
13.11.13
✎
02:45
|
зачем тебе вообще 1С ? пиши на JavaScript в консоли Firebug-а, с помощью jQuery можно делать POST и GET одной строчкой, а ты херней многоэтажной страдаешь
|
|||
56
zladenuw
13.11.13
✎
02:53
|
Для работы Firebug 1.4 требуется Firefox 3.0 или выше. у меня нету файр фокса.
да мне вообще понять что за чем. надо через 1с. или покажи как это проще без 1с. буду пробывать |
|||
57
badboychik
13.11.13
✎
03:08
|
че то я про ффокс не понял, на дворе 26-я версия, какая 3.0? ты вменяемый вообще?
(56) $.post( "mysite.ru/ajax/test.php", function( data ) { $( ".result" ).html( data ); // результат выводим в документ }); вот и всё |
|||
58
zladenuw
13.11.13
✎
03:10
|
(57) я про то что. что я этим не пользовался вообще.
и куда мне этот код ? :) |
|||
59
badboychik
13.11.13
✎
03:23
|
(58) ну смотри где нужная инфа на странице лежит и дергай ее обращаясь к блокам по нужному селектору CSS. Читай доки http://jquery-docs.ru/Selectors/
Когда все будет выбираться в консоли, вставишь скрипт в html-страницу на форме и будешь его вызывать одной кнопкой. А 1С в топку для такой задачи |
|||
60
zladenuw
13.11.13
✎
03:27
|
(59) так вот именно что надо через 1с. так как она вызывается с обработки которая в свою очередь дергаю с десяток обработок парсингов сайтов. и выводит результат в тз. по найденным артикулом с разных сайтов. вот такие дела
|
|||
61
vde69
модератор
13.11.13
✎
08:11
|
может так проще?
Попытка Соединение = Новый HTTPСоединение(ПараметрыСтроки.Хост,,,,,10); // Соединение = Новый HTTPСоединение(ПараметрыСтроки.Хост, <Порт>, <Пользователь>, <Пароль>, <Прокси>, <Таймаут>, <ЗащищенноеСоединение>); Исключение Сообщить("Не удалось установить соединение с сервером" + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); Возврат; КонецПопытки; Запрос = Новый HTTPЗапрос(ПараметрыСтроки.ПутьНаСервере, ПараметрыЗапроса) ; Попытка Если Площадка.ТипЗапросаСпискаТендеров = Перечисления.ТипыЗапросовHTTP.POST Тогда ПутьДляСохранения = ПолучитьИмяВременногоФайла(); Ответ = Соединение.ОтправитьДляОбработки(Запрос, ПутьДляСохранения); ИначеЕсли Площадка.ТипЗапросаСпискаТендеров = Перечисления.ТипыЗапросовHTTP.GET Тогда Ответ = Соединение.Получить(Запрос, ПутьДляСохранения); Иначе Сообщить("Не определен метод запроса HTTP" + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); Возврат; КонецЕсли; Исключение Сообщить("Ошибка при получении файла с сервера" + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); Возврат; КонецПопытки; ЧтениеHTML = Новый ЧтениеHTML; ЧтениеHTML.ОткрытьФайл(ПутьДляСохранения, СокрЛП(Площадка.Кодировка)); ПостроительDOM = Новый ПостроительDOM(); мДок = ПостроительDOM.Прочитать(ЧтениеHTML); ТекущийПуть = ""; Обработчики = Новый Соответствие; Для Каждого эл из Площадка.ОбработчикиСписка Цикл Обработчики.Вставить(эл.Тег, эл.Обработчик); КонецЦикла; |
|||
62
badboychik
13.11.13
✎
09:02
|
(60) скачай библиотеку от 1С - "Internet Connection Library" для работы с веб-ресурсами, там по крайней мере есть готовые методы для выполнения пост/гет запросов и обработки результата в JSON, не надо писать свои велосипеды
|
|||
63
zladenuw
13.11.13
✎
10:32
|
(62) спасиб гляну.
(61) буду пробовать. Я так и не понял что надо запихывать в нттпЗапрос |
|||
64
zladenuw
13.11.13
✎
12:09
|
(61)
Запрос = Новый HTTPЗапрос(ПараметрыСтроки.ПутьНаСервере, ПараметрыЗапроса) ; А что мне передавать в ПараметрыСтроки.ПутьНаСервере и ПараметрыЗапроса. В параметрызапроса, заголовки ? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |