<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Парсинг сайтов в Python

Парсинг сайтов в Python

Одной из самых частых задач в Python, да и не только в нем, является парсинг какого-либо сайта. Сделать средствами Python это достаточно просто и удобно и далее я Вам покажу как.

Код:

# файл site_parser.py

import requests               # библиотека для работы с http запросами
from bs4 import BeautifulSoup # разбор html
import time                   # работа со временем
import logging                # логирование


# шаблон URL у которого меняется идентификатор
URL = 'https:/example.com/post/%d'


# заголовки запроса, представляемся браузером Firefox/45 на Mac OS
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko/20100101 Firefox/45.0'
}

# файл, куда будут сохраняться логи
logging.basicConfig(filename="parser.log")



def parse(start=1, limit=10):

    """
        Данная функция непосредственно предназначена для парсинга.
        Параметр start и limit - идентификаторы запроса - от и до.
    """


    # делим больую выгрузку на меньшие части
    # и записываем в файл
    f = open('parsed/parsed_{start}_{limit}.csv'.format(start=start, limit=limit), 'a', encoding='utf-8')

    # генерируем id из заданного диапазона
    for counter in range(start, limit):

        try:
            # отправляем запрос на сервер
            req = requests.get(URL % counter, headers=headers)
        
        # логируем ошибки с помощью встроенного модуля
        # и переходим на следующую итерацию
        except requests.ConnectionError as e:
            logging.error('Id={id}; message={message}'.format(id=counter, message=str(e)))
            continue

        except requests.Timeout as e:
            logging.error('Id={id}; message={message}'.format(id=counter, message=str(e)))
            continue

        except requests.RequestException as e:
            logging.error('Id={id}; message={message}'.format(id=counter, message=str(e)))
            continue
    
        # если статус не равен 404, т.е. страница найдена
        if req.status_code != 404:
            
            # создаем объект html парсера
            soup = BeautifulSoup(req.text, 'lxml')
            
            # и получаем нужный div блок с контентом
            info = soup.find('div', {'class': 'block_cont'})
            
            # форматируем строку по желанию
            text = 'ID' + str(counter) + '; ' + info.text.replace('  ', '').strip().replace('\n', ';')
            
            # выводим в консоль
            print(text)
            
            # записываем в файл
            f.write(text + '\n')
            
            # останавливаем поток на 10мс
            time.sleep(0.1)

    f.close()


# создает диапазоны id
def create_ranges(start, stop, step):
    return [[i, i + step - 1] for i in range(start, stop, step)]

Файл main.py

from site_parser import parse, create_ranges # импортируем наши функции
from threading import Thread                 # импортируем класс Thread для работы с потоками


# создаем поток 
def create_thread(start, limit):

    # параметр target - наша функция для парсинга, args - кортеж аргументов для нее
    thread = Thread(target=parse, args=(start, limit))
    thread.start() # запускаем поток
    # thread.join()


def execute():
    
    # создаем диапазоны идентификаторов
    ranges = create_ranges(1, 100000, 10000)

    for rng in ranges:
        # запускаем поток
        create_thread(*rng)


# запускаем программу
if __name__ == '__main__':
    execute()

Запускаем так:

C:\> python main.py

Программа начинает выгружать информацию в несколько потоков и отображать вывод в консоль.

Вот так просто на Python можно сделать парсинг сайта.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.