Форум сайта python.su
0
Всем привет, пытаюсь спарсить отсюад: Your text to link here…
КБК, ввида
Коды бюджетной классификации;Наименование доходов
Написал, все прекрасно парсит, почти все…
Дело в том, что структура xpath немного ошибочная в документе
Проверил Коды бюджетной классификации и пути выходят такие:
//*[@id="main"]/div[2]/table/tbody/tr[2]/td[2]/p //*[@id="main"]/div[2]/table/tbody/tr[3]/td[2]/p[1] //*[@id="main"]/div[2]/table/tbody/tr[4]/td[2]/p[1] //*[@id="main"]/div[2]/table/tbody/tr[5]/td[2]/p //*[@id="main"]/div[2]/table/tbody/tr[9]/td[2]/p[2] //*[@id="main"]/div[2]/table/tbody/tr[7]/td[2]/p[1] //*[@id="main"]/div[2]/table/tbody/tr[5]/td[2]/p //*[@id="main"]/div[2]/table/tbody/tr[7]/td[2]/p[1]
from grab import Grab, GrabError import time import random g = Grab() g.setup(log_dir='log') kbk=open('ipkbk.txt').read().splitlines() kbkres= open('kbk_ip.txt','w') for x in range(len(kbk)): try: time.sleep(random.randint(5,15)) g.go(kbk[x]) sp = [ '//*[@id="main"]/div[2]/table/tbody/tr/td[2]/p', '//*[@id="main"]/div[2]/table/tbody/tr/td[1]/p' ] result = [[i.text() for i in g.doc.select(sp[j])] for j in range(len(sp))] for show in zip(*result): print 'IP'+';'.join(show).encode('utf-8') print>>kbkres,'IP'+';'.join(show).encode('windows 1251') except GrabError: time.sleep(120) g.go(kbk[x]) sp = [ '//*[@id="main"]/div[2]/table/tbody/tr/td[2]/p', '//*[@id="main"]/div[2]/table/tbody/tr/td[1]/p' ] result = [[i.text() for i in g.doc.select(sp[j])] for j in range(len(sp))] for show in zip(*result): print 'IP'+';'.join(show).encode('utf-8') print>>kbkres,'IP'+';'.join(show).encode('windows 1251') kbkres.close()
IPКоды бюджетной классификации;Наименование доходов IP182 1 01 02010 01 1000 110;Налог на доходы физических лиц с доходов, источником которых является налоговый агент, за исключением доходов, в отношении которых исчисление и уплата налога осуществляются в соответствии со статьями 227, 2271 и 228 Налогового кодекса Российской Федерации (сумма платежа (перерасчеты, недоимка и задолженность по соответствующему платежу, в том числе по отмененному) IP182 1 01 02010 01 2100 110;Налог на доходы физических лиц с доходов, источником которых является налоговый агент, за исключением доходов, в отношении которых исчисление и уплата налога осуществляются в соответствии со статьями 227, 2271 и 228 Налогового кодекса Российской Федерации (пени по соответствующему платежу) IP;Налог на доходы физических лиц с доходов, источником которых является налоговый агент, за исключением доходов, в отношении которых исчисление и уплата налога осуществляются в соответствии со статьями 227, 2271 и 228 Налогового кодекса Российской Федерации (проценты по соответствующему платежу) IP182 1 01 02010 01 2200 110;Налог на доходы физических лиц с доходов, источником которых является налоговый агент, за исключением доходов, в отношении которых исчисление и уплата налога осуществляются в соответствии со статьями 227, 2271 и 228 Налогового кодекса Российской Федерации (суммы денежных взысканий (штрафов) по соответствующему платежу согласно законодательству Российской Федерации) IP;Налог на доходы физических лиц с доходов, полученных от осуществления деятельности физическими лицами, зарегистрированными в качестве индивидуальных предпринимателей, нотариусов, занимающихся частной практикой, адвокатов, учредивших адвокатские кабинеты и других лиц, занимающихся частной практикой в соответствии со статьей 227 Налогового кодекса Российской Федерации (сумма платежа (перерасчеты, недоимка и задолженность по соответствующему платежу, в том числе по отмененному) IP182 1 01 02010 01 3000 110;Налог на доходы физических лиц с доходов, полученных от осуществления деятельности физическими лицами, зарегистрированными в качестве индивидуальных предпринимателей, нотариусов, занимающихся частной практикой, адвокатов, учредивших адвокатские кабинеты и других лиц, занимающихся частной практикой в соответствии со статьей 227 Налогового кодекса Российской Федерации (пени по соответствующему платежу) IP182 1 01 02020 01 1000 110;Налог на доходы физических лиц с доходов, полученных от осуществления деятельности физическими лицами, зарегистрированными в качестве индивидуальных предпринимателей, нотариусов, занимающихся частной практикой, адвокатов, учредивших адвокатские кабинеты и других лиц, занимающихся частной практикой в соответствии со статьей 227 Налогового кодекса Российской Федерации (проценты по соответствующему платежу) IP182 1 01 02020 01 2100 110;Налог на доходы физических лиц с доходов, полученных от осуществления деятельности физическими лицами, зарегистрированными в качестве индивидуальных предпринимателей, нотариусов, занимающихся частной практикой, адвокатов, учредивших адвокатские кабинеты и других лиц, занимающихся частной практикой в соответствии со статьей 227 Налогового кодекса Российской Федерации (суммы денежных взысканий (штрафов) по соответствующему платежу согласно законодательству Российской Федерации)
Отредактировано aydat (Окт. 18, 2016 09:11:58)
Офлайн
0
Гуру, нужна ваша помощь
Офлайн
857
Разложи всё на функции. Так у тебя свалка какая-то, в которой что-нибудь изменишь, из-за этого всё остальное сломается и даже не узнаешь. Код нужно изолировать, чтобы одна часть на другую никак не влияла, тогда его и менять можно.
Здесь почитаешь про модули.
Отредактировано py.user.next (Окт. 19, 2016 11:44:50)
Офлайн
0
py.user.next
Разложи всё на функции. Так у тебя свалка какая-то, в которой что-нибудь изменишь, из-за этого всё остальное сломается и даже не узнаешь. Код нужно изолировать, чтобы одна часть на другую никак не влияла, тогда его и менять можно.Здесь почитаешь про модули.
'//*[@id="main"]/div[2]/table/tbody/tr/td[2]/p[1]',
Офлайн
0
Всем привет, наконец-то поправил код, и теперь парсит от и до, (были косяки в html разметки)
Вопрос следующий, хочу 3 параметром парсить вид кбк (ИП,ФЛ,ЮЛ), сейчас я тупо добавляю его при выводе на экран
print 'IP'+';'.join(show).encode('utf-8')
# -*- coding: utf-8 -*- from grab import Grab, GrabError import time import random g = Grab() g.setup(log_dir='log') kbk=open('ipkbk.txt').read().splitlines() kbkres= open('kbk_ip.txt','w') for x in range(len(kbk)): try: time.sleep(random.randint(5,15)) g.go(kbk[x]) sp = [ '//*[@id="main"]/div[2]/table/tbody/tr[position() > 1]/td[2]', '//*[@id="main"]/div[2]/table/tbody/tr[position() > 1]/td[1]/p[1]' ] result = [[i.text() for i in g.doc.select(sp[j])] for j in range(len(sp))] for show in zip(*result): print 'IP'+';'.join(show).encode('utf-8') print>>kbkres,'IP;'+';'.join(show).encode('windows 1251') except GrabError: time.sleep(120) g.go(kbk[x]) sp = [ '//*[@id="main"]/div[2]/table/tbody/tr[position() > 1]/td[2]', '//*[@id="main"]/div[2]/table/tbody/tr[position() > 1]/td[1]/p[1]' ] result = [[i.text() for i in g.doc.select(sp[j])] for j in range(len(sp))] for show in zip(*result): print 'IP'+';'.join(show).encode('utf-8') print>>kbkres,'IP;'+';'.join(show).encode('windows 1251') kbkres.close()
kbk[x]=re.findall(r'https://www.nalog.ru/rn77/taxation/kbk/(.*)/.*/$', kbk[x])
Отредактировано aydat (Окт. 31, 2016 13:10:54)
Офлайн