Форум сайта python.su
0
Всем привет, понадобилось спарсить инфу с сайта, решил делать на питоне, хотя с ним плотно не знаком
целевой юрл site
и записать в файл
файл в формате:
номер в реестре БГ;Наименование заказчика-бенефициара;дата размещения;сумма
Пример:
Номер БГ
<a href="/epz/bankguarantee/guaranteeCard/generalInformation.html?guaranteeId=756371" target="_blank">05W1253616473416006402</a>
<dd> Наименование заказчика-бенефициара: </dd> <dd> <a href="http://old.zakupki.gov.ru/controls/public/action/organization/view?source=epz&organizationCode=03201000316" onclick="window.open(this.href); return false;" target="_blank" title="ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ КАЗЕННОЕ УЧРЕЖДЕНИЕ "ПОГРАНИЧНОЕ УПРАВЛЕНИЕ ФЕДЕРАЛЬНОЙ СЛУЖБЫ БЕЗОПАСНОСТИ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ПРИМОРСКОМУ КРАЮ""> ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ КАЗЕННОЕ УЧРЕЖДЕНИЕ "ПОГРАНИЧНОЕ УПРАВЛЕНИЕ ФЕДЕРАЛЬНОЙ СЛУЖБЫ БЕЗОПАСНОСТИ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ПРИМОРСКОМУ КРАЮ" </a> </dd>
<td colspan="2" class="publishingTd"> <ul class="publishing"> <li>Обновлено:</li> <li class="publishingDate">13.09.2016</li> <li>Размещено:</li> <li class="publishingDate">13.09.2016</li> </ul> </td>
<td class="amountTenderTd"> <p> <a style="text-decoration:none;" href="/epz/bankguarantee/printForm/view.html?printFormId=102343" target="_blank"> <span class="printBtn"></span> </a> <a href="/epz/bankguarantee/signview/list.html?printFormId=102343" class="linkPopUp ezp addBtn"></a> <a href="/epz/bankguarantee/extract/view.html?guaranteeId=72149" target="_blank"> <span class="orderingBtn"></span> </a> </p> <dl> <dt> 441 000,00 </dt> <dd>Российский рубль</dd> </dl>
Офлайн
20
# -*- coding: utf-8 -*- from grab import Grab g = Grab() 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=2721060592&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 ';'.join(show)
05W1253616473416006402;ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ КАЗЕННОЕ УЧРЕЖДЕНИЕ "ПОГРАНИЧНОЕ УПРАВЛЕНИЕ ФЕДЕРАЛЬНОЙ СЛУЖБЫ БЕЗОПАСНОСТИ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ПРИМОРСКОМУ КРАЮ";13.09.2016;515 700,00
Отредактировано noob_saibot (Сен. 28, 2016 11:08:08)
Офлайн
0
Пытаюсь разобрать в вашем коде, а как это сделать в цикле и парсить все сделки на странице? инн будут подгружаться из файла
Отредактировано aydat (Сен. 28, 2016 11:28:39)
Офлайн
20
aydatСкрипт выдаст все, я не весь вывод вставил.
Пытаюсь разобрать в вашем коде, а как это сделать в цикле? для всех сделок на странице?
Офлайн
0
noob_saibotа можно показать, как сделать цикл парсинга по количеству инн в файле innlist.txt
Отредактировано aydat (Сен. 28, 2016 11:33:03)
Офлайн
20
aydat1. Вообще не понял, что вы хотите.
по количеству инн в файле
Отредактировано noob_saibot (Сен. 28, 2016 11:57:53)
Офлайн
857
aydatВот так это должно выглядеть
а можно показать, как сделать цикл парсинга по количеству инн в файле innlist.txt
def make_url(inn): out = 'tram pam pam {}'.format(inn) return out def load_page(url): data = urlopen(url) out = data.read() return out def make_tree(page): out = lxml.html.fromstring(page) return out def get_records(tree): out = tree.findall('Box') return out def parse_record(root): a = root[0].text b = root[1].text c = root[2].text out = [a, b, c] return out def process_inn(inn): out = [] url = make_url(inn) text = load_page(url) tree = make_tree(text) nodes = get_records(tree) for i in nodes: out.append(parse_record(i)) return out def get_inn_numbers(fname): with open(fname, encoding='utf-8') as fin: return fin.read().splitlines() def load_all_inns(inns): out = [] for i in inns: out.append(process_inn(i)) return out def save_to_file(fname, lst): with open(fname, 'w', encoding='utf-8') as fout: for i in lst: print(';'.join(i), file=fout) def main(): inns = get_inn_numbers('input.txt') loaded_inns = load_all_inns(inns) save_to_file('output.txt', loaded_inns)
Отредактировано py.user.next (Сен. 28, 2016 14:38:23)
Офлайн
0
Друзья, при выводи результата кириллица, ошибка:
Traceback (most recent call last):[Decode error - output not utf-8]
"cmd": ["C:\\Python27\\python.exe", "-u", "$file"], "env": {"PYTHONPATH":"C:\\Projects"}, "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python", "encoding": "cp1251"
Building lxml version 3.6.4. Building without Cython. ERROR: "xslt-config" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
from lxml.etree import ParserError ImportError: DLL load failed: %1 не является приложением Win32.
# -*- coding: utf-8 -*- from grab import Grab inn=2721060592 #inn=7723644828 g = Grab() 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='+str(inn)+'&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 ';'.join(show).encode('utf-8')
Отредактировано aydat (Сен. 29, 2016 12:38:54)
Офлайн
0
Почти все получилось, кроме вывода в sp = [
inn и созранения вывода в файл в нормальной кодировки
for show in zip(*result): print>> bgres';'.join(show).encode('utf-8')
# -*- coding: utf-8 -*- from grab import Grab import time #inn=2721060592 #inn=7723644828 g = Grab() inn=open('innlist.txt').read().splitlines() bgres= open('bgresult.txt','w') for x in range(len(inn)): 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>> bgres';'.join(show).encode('utf-8') bgres.close()
Отредактировано aydat (Сен. 29, 2016 14:16:37)
Офлайн
0
Решил свои хотелки пока так:
# -*- coding: utf-8 -*- from grab import Grab import time #inn=2721060592 #inn=7723644828 g = Grab() inn=open('innlist.txt').read().splitlines() bgres= open('bgresult.txt','w') for x in range(len(inn)): 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>>bgres,str(inn[x])+';'+';'.join(show).encode('windows 1251') bgres.close()
grab.error.GrabTimeoutError: Connection timed out after 3011 millisecondsкак победить?
g.setup(hammer_mode=True, hammer_timeouts=((3, 5))
Отредактировано aydat (Сен. 30, 2016 09:20:22)
Офлайн