Что нового

[Автоматизация] Считывание определённого "куска" с URL

Dk

Новичок
Сообщения
358
Репутация
2
Версия AutoIt:[/b] 3.



В общем нужно следующее.

На страницe www.amazon.de если указать в поиске какую-нибудь вещь, например Книгу. то получится следующее

http://www.amazon.de/s/ref=nb_sb_noss_2?__mk_de_DE=%C3%85M%C3%85Z%C3%95%C3%91&url=search-alias%3Daps&field-keywords=php

на странице мы видим, что найдено 5292 .

На каждый товар (в нашем случае, это книга) можно зайти. И ссылки у товаров все одинаково построены. А именно :

1) http://www.amazon.de/PHP-5-4-MySQL-5-5-Programmierung/dp/3827331641/ref=sr_1_1?ie=UTF8&qid=1372776388&sr=8-1&keywords=php

2) http://www.amazon.de/Einstieg-PHP-5-4-MySQL-Programmieranf%C3%A4nger/dp/3836218771/ref=sr_1_3?ie=UTF8&qid=1372776388&sr=8-3&keywords=php

Мне нужно, что-бы программа считывала номера, которые стоят после /dp/ и до /ref тоесть к примеру

http://www.amazon.de/PHP-5-4-MySQL-5-5-Programmierung/dp/3827331641/ref=sr_1_1?ie=UTF8&qid=1372776388&sr=8-1&keywords=php
3827331641

Программа должна считывать этот кусочек с URL и сохранять его в текстовой файл столбиком. Разумеется Программа должна проделать это со всеми товарами, которые были найдены.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Люди ну помогите пожалуйста :'(
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Dk
Советую использовать
Код:
StringRegExp()

На форуме есть целый раздел, посвящённый этому... Куча примеров
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Dk

Как-то так:
Код:
#include <Array.au3>
#include <File.au3>

HotKeySet('{ESC}', '_Exit')

Global $x = 0

$sUrl = 'http://www.amazon.de/s/ref=nb_sb_noss_2?__mk_de_DE=%C3%85M%C3%85Z%C3%95%C3%91&url=search-alias%3Daps&field-keywords=php'

Dim $aResult2[1]

For $i = 0 To 1000 ; большое число

	$sText = BinaryToString(InetRead($sUrl))
	$aResult1 = StringRegExp($sText, '/dp/(.*?)/ref', 3)
	$aResult1 = _ArrayUnique($aResult1)

	_ArrayConcatenate($aResult2, $aResult1, 1)

	$aResult0 = StringRegExp($sText, 'href="/s/ref=sr_pg_(.*?)">', 3)
	$aResult0[UBound($aResult0) - 1] = StringReplace($aResult0[UBound($aResult0) - 1], 'amp;', '')
	If ($i <> 0 And UBound($aResult0) - 1 = 0) Or $x = 1 Then ExitLoop

	$sUrl = 'http://www.amazon.de/s/ref=sr_pg_' & $aResult0[UBound($aResult0) - 1]

Next

;_ArrayDisplay($aResult2)

_FileWriteFromArray('Log.txt', $aResult2, 1)

Func _Exit()
	$x = 1
EndFunc   ;==>_Exit


Останавливается при нажатии ESC
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Спасибо Огромное :-[ :smile:
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
К сожалению скрипт перестал работать, скорее всего были изменения на странице.
Помогите обновить скрипт
Выдаёт следующею ошибку
21) : ==> Subscript used with non-Array variable.:


Добавлено:
Сообщение автоматически объединено:

Я не могу понять почему он не находит часть строки ведь она есть
Вот
Код:
href="/s/ref=sr_pg_1?rh=i%3Aaps%2Ck%3Aphp&amp;keywords=php&amp;ie=UTF8&amp;qid=1401546788">

Код:
$aResult0 = StringRegExp($sText, 'href="/s/ref=sr_pg_(.*?)">', 3)



Почему не выдаёт всё что между href="/s/ref=sr_pg_ и "> :mad:
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Dk
Действительно, там код страницы, который получается через InetRead и код в браузере почему-то не совпадают, усложнили.
Посмотрю, когда будет время, что можно сделать.
 
Верх