rami
Вот мой вариант:
Спасибо огромное!!! Ваши уроки бесценны! Хороший код python - это поэзия, черт побери! Это круто!
rami
Вот мой вариант:
from selenium import webdriver from bs4 import BeautifulSoup as bs import time import re URL = 'http://publication.pravo.gov.ru/SignatoryAuthority/region17' #ссылка на ваш регион COUNT = 3040 #всего документов на сайте по региону def page_parser(soup): ''' извлекаем данные из страницы :return page_doc ->set(title, url, file, type_file, page_doc, date, id) ''' PLUS_URL = 'http://publication.pravo.gov.ru{}' all_doc = [] for item in soup.findAll("div", {"class": "tr"})[1:]: try: content = item.find( "div", {"class": "td vis"}) title = content.find('a').text url = content.find( 'a' ).get('href') url = PLUS_URL.format(url) file = content.find('span', attrs={'class': 'notforprint'}).find('a').get('href') file = PLUS_URL.format(file) type_file = content.find( 'span', attrs={'class': 'notforprint'} ).find( 'a' ).text page_doc = content.find( 'span', attrs={'class': 'pagesindoccount'} ).text page_doc = re.findall('(\d+)', page_doc)[0] id = item.find( "div", {"class": "td vis notforprint"})\ .find('span', attrs={'class': 'pagesindoccount information'}).text date = item.find( "div", {"class": "td vis notforprint"})\ .findAll('span', attrs={'class': 'pagesindoccount information'})[1].text doc = (id, title, date, url, file, type_file, page_doc) all_doc.append(doc) except: z=0 return all_doc driver = r'D:\AnacodaProgect\geckodriver.exe' #драйвер для Firefox https://github.com/mozilla/geckodriver/releases browser = webdriver.Firefox(executable_path=driver) browser.get(URL) page_count = [] OUTPUT_FILE = 'pravo_doc.csv' with open(OUTPUT_FILE, 'w') as f: print('Начинаю парсить данные, ожидайте...') for pagination in range(1, (COUNT//30)+1): time.sleep(4) browser.find_element_by_class_name("page-nave-next").click() soup = bs( browser.page_source, 'lxml') for doc in (page_parser(soup)): stroka = '|'.join(doc) page_count.append(stroka) print ('Получено {} документов из {}'.format(len(page_count),COUNT)) f.write(stroka + '\n') f.close() print('Описательная часть {} правовых актов региона получена'.format(len(page_count)))
irgitНе совсем с учётом
С учётом ваших замечаний написал…
ramiкаюсь Больше не буду)
Два дня назад PEHDOM писал вам об обработке ошибок, но вы продолжаете except: z=0.
ramiбуду знать
f.close() не нужно, контекстный менеджер with сам закроет файл когда нужно.
irgit
doc = (id, title, date, url, file, type_file, page_doc)
all_doc.append(doc)
if not id or not title or not date...:
irgitключевое слово “множества” используйте например пересечение множеств,
Как разом проверить все значения множества?
a= {'1','2',''} b={''} print(a&b) >>> {''} >>>
doc = my_id, title, date, url, file, type_file, page_doc = '', 'title', 'date', 'url', 'file', 'type_file', 'page_doc' all(doc) False
ramiСпасибо за хороший рецепт)
Используйте функцию all():
# -*- coding: utf-8 -*- """ Класс подключения к базе MSQL """ import pymysql.cursors # Настройки базы base = 'megaparser' base_user = 'root' base_pass = '' class Connect_my_base(object): """Создаём соединение с базой""" def __init__(self, base, base_user, base_pass): """Инициализируем соединение""" self.base = base self.base_user = base_user self.base_pass = base_pass def sql_connection(self): """Соединяемся с базой""" connection = pymysql.connect(host='localhost', user=self.base_user, password=self.base_pass, db=self.base, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) return connection class Get_sql(object): """Делаем запрос к базе""" def __init__(self, sql, cursor): self.sql = sql def get_row(self): connection = Connect_my_base(base, base_user, base_pass) # -- КАК ВЫЗВАТЬ pymysql.cursors к классу Connect_my_base? # -- что-то типа with connection.cursor() as cursor:
irgit
Здравствуйте. Осваиваю классы и не могу понять, как вызвать класс внутри класса. Посмотрите пожалуйста код, затык на вызове with connection.cursor() as cursor: Заранее благодарю за советы
# -*- coding: utf-8 -*- """ Класс подключения к базе MSQL Автор Иргит Валерий Пример: Connect_my_base(base, base_user, base_pass).get_site(sql) """ import pymysql.cursors class Connect_my_base(object): """Создаём соединение с базой""" def __init__(self, base, base_user, base_pass): """Инициализируем соединение""" self.base = base self.base_user = base_user self.base_pass = base_pass def connect_base(self): """Соединяемся с базой""" connection = pymysql.connect(host='localhost', user=self.base_user, password=self.base_pass, db=self.base, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) return connection def get_site(self, sql): connection = self.connect_base() with connection.cursor() as cursor: cursor.execute(sql) rows = cursor.fetchall() cursor.close() connection.close() return rows