aydat1. Поиграться с hammer_mode
как победить?
2. Обрабатывать исключение.
noob_saibotПопробовал обработать исключение, правильно?
g.setup(log_file='log.txt')
# -*- coding: utf-8 -*- from grab import Grab import time #inn=2721060592 #inn=7723644828 g = Grab() #g.setup(hammer_mode=True, hammer_timeouts=((1, 1), (2, 2), (30, 30))) inn=open('innlist.txt').read().splitlines() bgres= open('bgresult.txt','w') for x in range(len(inn)): try: time.sleep(3) g.go('http://old.zakupki.gov.ru/epz/bankguarantee/extendedsearch/search.html?sortDirection=false&guaranteeSortType=PUBLISH_DATE_SORT&recordsPerPage=_100&pageNumber=1&searchText=&strictEqual=false&morphology=false&statuses=PUBLISHED&supplies=&publishDateStart=&publishDateEnd=&updateDateStart=&updateDateEnd=&amountMin=&amountMax=¤cyCode=RUB&supplierInn='+inn[x]+'&validityStartDateFrom=&validityEndDateTo=&contractNumber=&orderNumber=&searchAttachedFile=false&attachedFileName=&organizationSearchItem.code=&organizationSearchItem.fz94id=&organizationSearchItem.fz223id=&organizationSearchItem.title=&organizationSearchItem.inn=&bankSearchItem.code=&bankSearchItem.fz94id=&bankSearchItem.fz223id=&bankSearchItem.title=&bankSearchItem.inn=') sp = [ '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td/dl/dt/a', '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td/dl/dd[6]/a', '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td/ul/li[4]', '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td[3]/dl/dt' ] result = [[i.text() for i in g.doc.select(sp[j])] for j in range(len(sp))] for show in zip(*result): print str(inn[x])+';'+';'.join(show).encode('utf-8') print>>bgres,str(inn[x])+';'+';'.join(show).encode('windows 1251') except Exception: time.sleep(5) g.go('http://old.zakupki.gov.ru/epz/bankguarantee/extendedsearch/search.html?sortDirection=false&guaranteeSortType=PUBLISH_DATE_SORT&recordsPerPage=_100&pageNumber=1&searchText=&strictEqual=false&morphology=false&statuses=PUBLISHED&supplies=&publishDateStart=&publishDateEnd=&updateDateStart=&updateDateEnd=&amountMin=&amountMax=¤cyCode=RUB&supplierInn='+inn[x]+'&validityStartDateFrom=&validityEndDateTo=&contractNumber=&orderNumber=&searchAttachedFile=false&attachedFileName=&organizationSearchItem.code=&organizationSearchItem.fz94id=&organizationSearchItem.fz223id=&organizationSearchItem.title=&organizationSearchItem.inn=&bankSearchItem.code=&bankSearchItem.fz94id=&bankSearchItem.fz223id=&bankSearchItem.title=&bankSearchItem.inn=') sp = [ '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td/dl/dt/a', '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td/dl/dd[6]/a', '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td/ul/li[4]', '//*[@id="exceedSphinxPageSizeDiv"]/div/table/tbody/tr/td[3]/dl/dt' ] result = [[i.text() for i in g.doc.select(sp[j])] for j in range(len(sp))] for show in zip(*result): print str(inn[x])+';'+';'.join(show).encode('utf-8') print>>bgres,str(inn[x])+';'+';'.join(show).encode('windows 1251') bgres.close()
aydatЖелательно перехватывать исключение именно по тайм ауту от граба, а не все.
import time def foo(n): try: print 1/n except ZeroDivisionError: print 'Whoops' time.sleep(1) n += 1 foo(n) foo(0)
aydatДавай входной файл с ИННхами и выходной файл с результатами для них. Можно три ИННхи, но чтобы точно было.
может как-то легче можно было сделать?
py.user.nextНе долго музыка играла, 380 запрос и 403 ошибка, что делать?
g.go('https://www.nalog.ru/rn77/taxation/kbk/fl/ndfl/') sp = [ '//*[@id="main"]/div[2]/table/tbody/tr[2]/td[2]/p', '//*[@id="main"]/div[2]/table/tbody/tr[2]/td[1]/p/text()' ] result = [[i.text() for i in g.doc.select(sp[j])] for j in range(len(sp))] for show in zip(*result): print ';'.join(show).encode('utf-8')
182 1 01 02030 01 1000 110;Налог на доходы физических лиц с доходов, полученных физическими лицами в соответствии со статьей 228 Налогового Кодекса Российской Федерации (сумма платежа (перерасчеты, недоимка и задолженность по соответствующему платежу, в том числе по отмененному) [Finished in 0.8s]