Python Question
Пётр Осипов

Сабж : Имеем код Вида

import urllib2
import re
import time

def getHtml(url):
    page = urllib2.urlopen(url)
    html = page.read()
    return html
f=open('url.txt', 'w')
i=1
while i <10001:
    time.sleep(2)
    url = "http://www.amazon.com/review/top-reviewers/ref=cm_cr_tr_link_2?ie=UTF8&page="+str(i)
    html = getHtml(url)
    #req = re.compile(r'<td class="crNum">#(.*?) </td>')
    ids= re.findall(r'<a name="(.*)"></td>',html)
    #nums = re.findall(req,html)
    num = i*10-9
    for id in ids:
        print num,
        f.write(str(num) + ' ')
        num=num+1
        url = "http://www.amazon.com/gp/pdp/profile/"+id
        print url
        f.write(url + '\n')
    i=i+1

f.close()

Который заходит на страницу http://www.amazon.com/review/top-reviewers/ref=cm_cr_tr_link_2?ie=UTF8&page= и перемещается по страницам 1 2 3 4 5 и так до того значения которое указано в цикле (в моём случае 10001) .

Что он делает?
Собирает ссылки на пользователей .
Ничего особенного .

Но самое интерестное начинается при запуске скрипта
Тут варианта 4
1)Запустится и будет работать вплоть до 120-ой строки результата
2)Не запустится
3)Запускаетится , подумает и закрашится
4)Запустится и закрашится сразу

Мои наблюдения : Завершается - показав ошибку 503
Лезем в гугл с надеждой исцелить пациента
503 Service Unavailable - Обработка запросов требует времени, поэтому они ставятся в очередь. Если длина очереди достигает определённой величины, то сервер перестает принимать новые запросы, возвращая ошибку 503 (сервис временно недоступен).

Смотрим внимательнее в исполнитель скрипта и читаем что он нам пишет -

Полный лог :
```
/System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 /Users/aio/Desktop/code/getURL.py
1 http://www.amazon.com/gp/pdp/profile/ALYZJ7W14YS26
2 http://www.amazon.com/gp/pdp/profile/A14ZQ17DIPJ6UB
3 http://www.amazon.com/gp/pdp/profile/A1E1LEVQ9VQNK
4 http://www.amazon.com/gp/pdp/profile/A2D1LPEUCTNT8X
5 http://www.amazon.com/gp/pdp/profile/A1IU7S4HCK1XK0
6 http://www.amazon.com/gp/pdp/profile/A1X1CEGHTHMBL1
7 http://www.amazon.com/gp/pdp/profile/AOEAD7DPLZE53
8 http://www.amazon.com/gp/pdp/profile/A2LXX47A0KMJVX
9 http://www.amazon.com/gp/pdp/profile/AZKRFNQ8EFO4T
10 http://www.amazon.com/gp/pdp/profile/A1WPFIZ8P3O86V
11 http://www.amazon.com/gp/pdp/profile/A21OBYW0N5ENS7
12 http://www.amazon.com/gp/pdp/profile/A2W0GY64CJSV5D
13 http://www.amazon.com/gp/pdp/profile/A2PNBB4GXRG14K
14 http://www.amazon.com/gp/pdp/profile/A2HC94KQKVGIA1
15 http://www.amazon.com/gp/pdp/profile/A3R1WFO4KIUQXZ
16 http://www.amazon.com/gp/pdp/profile/A202CZ4PJH83G4
17 http://www.amazon.com/gp/pdp/profile/A3SR3PZM0IQ6OR
18 http://www.amazon.com/gp/pdp/profile/A1H4BDHFRBPRV9
19 http://www.amazon.com/gp/pdp/profile/A2O489VAPVIH35
20 http://www.amazon.com/gp/pdp/profile/A1TUL3FFHYEXBK
21 http://www.amazon.com/gp/pdp/profile/A10PEXB6XAQ5XF
22 http://www.amazon.com/gp/pdp/profile/ADLVFFE4VBT8
23 http://www.amazon.com/gp/pdp/profile/A12DQZKRKTNF5E
24 http://www.amazon.com/gp/pdp/profile/A25GROL6KJV3QG
25 http://www.amazon.com/gp/pdp/profile/ABDR6IJ93HFIO
26 http://www.amazon.com/gp/pdp/profile/A2MZZP3ZU9B5JS
27 http://www.amazon.com/gp/pdp/profile/A16T2C41GZYAJZ
28 http://www.amazon.com/gp/pdp/profile/A317ULX3VVI09F
29 http://www.amazon.com/gp/pdp/profile/A7EU2BWLLCJY2
30 http://www.amazon.com/gp/pdp/profile/A2SWGQVH78I33R
31 http://www.amazon.com/gp/pdp/profile/A3S3R88HA0HZG3
32 http://www.amazon.com/gp/pdp/profile/A1MC6BFHWY6WC3
33 http://www.amazon.com/gp/pdp/profile/A2VYLXYG3H6TYN
34 http://www.amazon.com/gp/pdp/profile/A2BYV7S1QP2YIG
35 http://www.amazon.com/gp/pdp/profile/A2NYK9KWFMJV4Y
36 http://www.amazon.com/gp/pdp/profile/A2KWFSBGBMTLOL
37 http://www.amazon.com/gp/pdp/profile/A31N0XY2UTB25C
38 http://www.amazon.com/gp/pdp/profile/A25C2M3QF9G7OQ
39 http://www.amazon.com/gp/pdp/profile/AO1Z0TQWCRGL4
40 http://www.amazon.com/gp/pdp/profile/A1JZFGZEZVWQPY
Traceback (most recent call last):
File "/Users/aio/Desktop/code/getURL.py", line 14, in <module>
html = getHtml(url)
File "/Users/aio/Desktop/code/getURL.py", line 6, in getHtml
page = urllib2.urlopen(url)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 126, in urlopen
return opener.open(url, data, timeout)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 435, in error
return self.
call_chain(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 369, in call_chain
result = func(*args)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 518, in http
error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 503: Service Unavailable

Process finished with exit code 1
```
Дополнение : Тестировал на разных платформах , (win , macos )
Под разным железом
с разными IP
Пробывал даже давать передышку после каждой итерации (time.sleep(20))
не спасает

UPD % 17 03 (14 nov 2016)

После долгих попыток найти правду - я нашёл ответ
Амазон категорически против такого рода издевательств над своими серверами - поэтому приходится извиваться и ставить таймауты по 5 минут .
нас это не устраивает , поэтому будем исходить из логики

Что нам мешает производить запросы чаще?
то , что Амазон видит - какая мы машина.
Супер

Что нужно сделать?

hdr = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
req = urllib2.Request(site, headers=hdr)

    Вопрос , как передавать этот хедер при каждой итерации цикла? (знатоки , подправьте меня)

"Что-же с тобой не так , мразь?"
Господа , Ваши варианты в Студию .

3 чел.