kliMaster

kliMaster

Пикабушник
поставил 820 плюсов и 163 минуса
отредактировал 1 пост
проголосовал за 1 редактирование
Награды:
5 лет на Пикабу
64К рейтинг 768 подписчиков 74 подписки 301 пост 107 в горячем

Всё о парсинге сайтов на Python

Делюсь тем что считаю ИМХО интересным, прошу не нужно меня обсуждать и давать мне советы, иначе вы быстро подружитесь с моим игнор листом.

Михаил Коробов и Константин Лопухин (Scrapinghub) «Как собрать датасет из интернета»



Часть 1



Анализ данных предполагает, в первую очередь, наличие этих данных. Первая часть доклада рассказывает о том, что делать, если у вас не имеется готового/стандартного датасета, либо он не соответствует тому, каким должен быть. Наиболее очевидный вариант — скачать данные из интернета. Это можно сделать множеством способов, начиная с сохранения html-страницы и заканчивая Event loop (моделью событийного цикла). Последний основан на параллелизме в JavaScript, что позволяет значительно повысить производительность. В парсинге event loop реализуется с помощью технологии AJAX, утилит вроде Scrapy или любого асинхронного фреймворка.



Извлечение данных из html связано с обходом дерева, который может осуществляться с применением различных техник и технологий. В докладе рассматриваются три «языка» обхода дерева: CSS-селекторы, XPath и DSL. Первые два состоят в довольно тесном родстве и выигрывают за счет своей универсальности и широкой сфере применения. DSL (предметно-ориентированный язык, domain-specific language) для парсинга существует довольно много, и хороши они, в первую очередь, тем, что удобство работы с ним осуществляется благодаря поддержке IDE и валидации со стороны языка программирования.



Для тренировки написания пауков компанией ScrapingHub создан учебный сайт toscrape.com, на примере которого рассматривается парсинг книжного сайта. С помощью chrome-расширения SelectorGadget, которое позволяет генерировать CSS-селекторы, выделяя элементы на странице, можно облегчить написание скрапера.

import scrapy



class BookSpider(scrapy.Spider):


name = 'books'


start_urls = ['http://books.toscrape.com/']



def parse(self, response):


for href in response.css('.product_pod a::attr(href)').extract():


url = response.urljoin(href)


print(url)


Пример без scrapy:


import json

from urllib.parse import urljoin


import requests


from parsel import Selector



index = requests.get('http://books.toscrape.com/')


books = []



for href in Selector(index.text).css('.product_pod a::attr(href)').extract():


url = urljoin(index.url, href)


book_page = requests.get(url)


sel = Selector(book_page.text)


books.append({


'title': sel.css('h1::text').extract_first(),


'price': sel.css('.product_main .price_color::text')extract_first(),


'image': sel.css('#product_gallery img::attr(src)').extract_first()


})



with open('books.json', 'w') as fp:


json.dump(books, fp)



Некоторые сайты сами помогают парсингу с помощью специальных тегов и атрибутов html. Легкость парсинга улучшает SEO сайта, так как при этом обеспечивается большая легкость поиска сайта в сети.



Часть 2



О скорости скачивания страниц, распределении на процессы и способах их координации. При больших объемах выборки данных важно оптимизировать скорость и частоту запросов таким образом, чтобы не положить сайт и не быть заблокированным за бомбардировку автоматическими запросами. Это может быть реализовано путем разбиения на несколько процессов: например, разделив между ними url-ы, чтобы в рамках одного процесса осуществлялся парсинг одного сайта. Еще один вариант — общая очередь, куда помещаются запросы и достаются по мере необходимости.



Какие существуют варианты хранения полученных данных? Можно извлекать информацию сразу, либо сохранять HTML-страницы для последующей обработки в исходном (около 100КБ) или сжатом (15 КБ) размере. Порядок обхода сайта для извлечения данных зависит от его объема и структуры. Большинство современных сайтов представляют собой весьма сложные конфигурации большого числа страниц со ссылками друг на друга, напоминающие паутину. Две стандартные стратегии обхода: в глубину и в ширину. Плюсы и минусы обхода в глубину:



небольшой размер очереди запросов


удобен для краулера одного сайта


может не подойти для обхода всех ссылок (т.к. глубина может быть очень боьлшой или бесконечной)


Особенности в ширину:



подходит для обхода всех ссылок на сайте


большой размер очереди


реальная глубина — 2-4


возможные проблемы глубины в графе ссылок


Вторая часть доклада посвящена примерам ресурсов, предоставляющих готовые датасеты, собранные со всего интернета. В базе данных Common Crawl, например, хранится около 300 ТБ информации, которая обновляется каждый месяц. Сервис Web Data Commons извлекает из Common Crawl структурированные данные.



Дмитрий Сергеев (ZeptoLab) «Написание пауков, или что делать, когда тебя вычисляют по IP»



Как вести себя, если при сборе данных сервер блокирует ваши автоматические запросы, выдавая ошибки 403, 404, 503 и так далее? Во-первых, нужно запастись терпением и пожертвовать частотой отправки запросов. Ни один уважающий себя сервер не потерпит бесцеремонной продолжительной бомбардировки автоматическими запросами. Докладчик столкнулся с этим лично, проводя на досуге исследование популярности мемов на одном из популярных информационных ресурсов. Будучи заблокированным по IP, он написал письмо в техподдержку с просьбой разбанить его, на что получил автоматический ответ о разблокировке. Подумав, что, если ему отвечает автомат, то и просить о разблокировке можно автоматически, он написал бота, который при каждом бане отправлял поддержке письмо с текущим IP и слезной просьбой о разбане. Автоматы переписывались всю ночь, в течение которой докладчик выяснил, что время ожидания разбана растет экспоненциально.



Постепенно он учился быть похожим на человека не нарушая трех законов робототехники имитируя браузер: ставя временны′е заглушки перед запросами (при заполнении форм, кликах на кнопки, переходе по страницам, параллельных запросах и т.д.):


time.sleep(3)


генерируя случайные юзер-агенты:

Всё о парсинге сайтов на Python Парсинг, Python, Модератор, Видео, Длиннопост

https://proglib.io/wp-content/uploads/-000//1/request-header...

и используя Tor для многоуровневой переадресации:

Всё о парсинге сайтов на Python Парсинг, Python, Модератор, Видео, Длиннопост

Комбинация этих методов позволяет достичь желаемого объема полученной информации без потери времени на баны и ожидание разблокировки.



Пример



Пример кода, который использует генератор хэдеров и тор для определения текущего IP-адреса:


import os


import socket


import requests


import time



import socks


import stem.process


from stem import Signal


from stem.control import Controller


from user_agent import generate_user_agent



current_time = lambda: int(round(time.time()))



class Network:



def switch_ip(self):


self.controller.signal(Signal.NEWNYM)


print("Switching IP. Waiting.")


t = current_time()


time.sleep(self.controller.get_newnym_wait())


print("{0}s gone".format(current_time() - t))



def print_bootstrap_lines(self, line):


print(line)



def init_tor(self, password='supersafe', log_handler=None):


self.tor_process = None


self.controller = None



try:


self.tor_process = stem.process.launch_tor_with_config(


tor_cmd=self.tor_path,


config=self.tor_config,


init_msg_handler=log_handler


)



self.controller = Controller.from_port(port=self.SOCKS_PORT + 1)


self.controller.authenticate(password)



except:


if self.tor_process is not None:


self.tor_process.terminate()


if self.controller is not None:


self.controller.close()



raise RuntimeError('Failed to initialize Tor')



socket.socket = self.proxySocket



def kill_tor(self):


print('Killing Tor process')


if self.tor_process is not None:


self.tor_process.kill()



if self.controller is not None:


self.controller.close()



def __init__(self):


# путь к директории файлов браузера Tor. В данном случае, директория для OS X


TOR_DIR = '/Applications/TorBrowser.app/Contents/Resources/TorBrowser/Tor/'


PASS_HASH = '16:DEBBA657C88BA8D060A5FDD014BD42DB7B5B736C0C248422F37C46B930'


IP_ADDRESS = '127.0.0.1'


self.SOCKS_PORT = 9150



self.tor_config = {


'SocksPort': str(self.SOCKS_PORT),


'ControlPort': str(self.SOCKS_PORT + 1),


'HashedControlPassword': PASS_HASH,


'GeoIPFile': os.path.join(TOR_DIR, 'geoip'),


'GeoIPv6File': os.path.join(TOR_DIR, 'geoip6')


}



self.tor_path = os.path.join(TOR_DIR, 'tor')


# Setup proxy


socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, IP_ADDRESS, self.SOCKS_PORT)



self.nonProxySocket = socket.socket


self.proxySocket = socks.socksocket



def main():



try:


network = Network()


network.init_tor('supersafe', network.print_bootstrap_lines)



url = 'http://checkip.amazonaws.com/'


headers = {'User-Agent': generate_user_agent()}



req = requests.get(url, headers=headers)


print(req.content)


network.switch_ip()


req = requests.get(url, headers=headers)


print(req.content)


finally:


network.kill_tor()



if __name__ == "__main__":


main()

P.S. извинения мои за то что спамлю в ленту по сути и вот почему

#comment_97100591

К сожалению, Ваш пост «Всё о парсинге сайтов на Python» удален. Причина: запрещено размещение поста, единственным содержанием которого является ссылка


А сейчас наверное из за игнора БМа пост удалят? нет?

Показать полностью 2 3

Всё о парсинге сайтов на Python

Делюсь тем что считаю ИМХО интересным, прошу не нужно меня обсуждать и давать мне советы, иначе вы быстро подружитесь с моим игнор листом.

Михаил Коробов и Константин Лопухин (Scrapinghub) «Как собрать датасет из интернета»


Часть 1


Анализ данных предполагает, в первую очередь, наличие этих данных. Первая часть доклада рассказывает о том, что делать, если у вас не имеется готового/стандартного датасета, либо он не соответствует тому, каким должен быть. Наиболее очевидный вариант — скачать данные из интернета. Это можно сделать множеством способов, начиная с сохранения html-страницы и заканчивая Event loop (моделью событийного цикла). Последний основан на параллелизме в JavaScript, что позволяет значительно повысить производительность. В парсинге event loop реализуется с помощью технологии AJAX, утилит вроде Scrapy или любого асинхронного фреймворка.



Извлечение данных из html связано с обходом дерева, который может осуществляться с применением различных техник и технологий. В докладе рассматриваются три «языка» обхода дерева: CSS-селекторы, XPath и DSL. Первые два состоят в довольно тесном родстве и выигрывают за счет своей универсальности и широкой сфере применения. DSL (предметно-ориентированный язык, domain-specific language) для парсинга существует довольно много, и хороши они, в первую очередь, тем, что удобство работы с ним осуществляется благодаря поддержке IDE и валидации со стороны языка программирования.



Для тренировки написания пауков компанией ScrapingHub создан учебный сайт toscrape.com, на примере которого рассматривается парсинг книжного сайта. С помощью chrome-расширения SelectorGadget, которое позволяет генерировать CSS-селекторы, выделяя элементы на странице, можно облегчить написание скрапера.


Продолжение!

Показать полностью

Будем поглядеть - расширение позволит запретить сбор личной информации для "Интернет-профиля".

Наткнулся вот на это:


Чтобы пользователи могли запретить Google Analytics собирать информацию о себе при посещении веб-сайтов, мы создали расширение для браузера, блокирующее скрипты Google Analytics (ga.js, analytics.js, dc.js).
https://chrome.google.com/webstore/detail/google-analytics-o...

Будем поглядеть - расширение позволит запретить сбор личной информации для "Интернет-профиля". Информационная безопасность, Антиреклама, Google

P.S. Чтобы большой брат не следил за нами!

Недавние события касающиеся ИБ на территории Казахстана. Хакеры атаковали сервера казахстанских банков.

Недавние события касающиеся ИБ на территории Казахстана. Хакеры атаковали сервера казахстанских банков. Хакеры, Атака, Банк, Казахстан, Рк, Кнб, Кнб РК

С 27 сентября наблюдается повышенная активность хакеров на сервера ряда казахстанских банков, в том числе интернет-портал Homebank, сообщила пресс-служба Qazkom.


«Специалисты банка 27 сентября зафиксировали масштабную DDoS-атаку в виде ложных запросов одновременно с огромного числа IP-адресов, что блокируют работу портала», — говорится в сообщении банка.

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


«Приносим свои извинения, если будут наблюдаться задержки в проведении операций или сайт будет временно недоступен. Мы делаем всё возможное для нормализации работы Homebank и просим отнестись к этому с пониманием», — сообщает Qazkom.


В PR-службе Народного банка сообщили, что DDoS атаки не затронули их сервера и сервисы.


«Все системы и сервисы HalykBank работают в штатном режиме. Cпециалисты банка мониторят ситуацию и готовы оперативно предпринять меры по противодействию возможной атаке. Средства клиентов находятся в безопасности и проблем с проведением операций не наблюдается», — говорится в сообщении Народного банка.


В ближайшее время Informburo.kz ждёт ответа на запрос от Kaspi Bank.


Накануне в КНБ РК заявили, что банки скрывают информацию о хакерских атаках. В 2017 году шесть банков подверглись фишинговой атаке и только один из них обратился за помощью в КНБ.

https://informburo.kz/novosti/hakery-atakovali-servera-kazah...

P.S. КНБ РК=ФСБ РФ.

Показать полностью

Окс как всегда лучший!!!

Злоумышленники внедрили бэкдор в репозиторий Python

Злоумышленники внедрили бэкдор в репозиторий Python Вредоносные библиотеки, Python

Злоумышленники загрузили вредоносные библиотеки, собиравшие информацию о пользователях.

Национальная служба безопасности Словакии (Národný bezpečnostný úrad, NBU) выявила в каталоге PyPI десять вредоносных библиотек Python. PyPI (Python Package Index) – официальный каталог стороннего ПО для языка программирования Python.


По словам специалистов из NBU, злоумышленники использовали метод, известный как тайпосковоттинг. Для загрузки библиотек использовались имена, похожие на имена легитимных пакетов, но с «опечаткой», например, «urlib» вместо «urllib».


Загрузить вредоносные модули в каталог не составило труда, поскольку PyPI не выполняет проверок безопасности при загрузке новых пакетов. Библиотеки содержали тот же код, что и легитимные аналоги, поэтому их функциональные возможности были одинаковы, но в скрипт установки setup.py был добавлен вредоносный код, пояснили эксперты.


Вредоносный код собирал информацию о зараженных хостах, в частности имя и версию фальшивого пакета, имя пользователя, установившего библиотеку, и имя компьютера. Собранные данные отправлялись на удаленный сервер в Китае (IP-адрес 121.42.217.44). Вредоносный код был обнаружен в следующих библиотеках: acqusition, apidev-coop, bzip, crypt, django-server, pwd, setup-tools, telnet, urlib3,urllib. По словам экспертов, вредоносные библиотеки были активны в период с июня по сентябрь 2017 года и использовались в нескольких пакетах программного обеспечения. Более подробную информацию можно найти в отчете NBU.


Представители NBU связались с администраторами PyPI и сообщили о проблеме. В настоящее время все вредоносные библиотеки удалены из каталога.


Подробнее: http://www.securitylab.ru/news/488533.php?R=1

Злоумышленники внедрили бэкдор в репозиторий Python Вредоносные библиотеки, Python
Показать полностью 1

«НЛО» на орбитальных снимках NASA

«НЛО» на орбитальных снимках NASA NASA, НЛО
Изучая снимки, сделанные астронавтом на орбите Земли, уфологи, по их собственным словам, заметили треугольный НЛО. По мнению самопровозглашенных специалистов, данный объект представляет собой космический корабль инопланетян. Как утверждается, два снимка, на которых оказался запечатлен гигантский звездолет, были сделаны астронавтом NASA еще 30 лет назад.


http://www.mk.ru/science/2017/09/11/ufologi-soobshhili-ob-v-...

«НЛО» на орбитальных снимках NASA NASA, НЛО
Показать полностью 1

Посвящается bestdark. Дроп как их создают и как ими управляют.

Впервые за долгое время был интересный пост а именно https://pikabu.ru/story/righttoleft_override_i_pochemu_on_op...

Так вот хочу показать вам людей которые создают подобные дропы, и как всё это выглядит по ту сторону экрана, добавим щепотку паранойи в вашу бочку меда)))

Собственно что мы можем сделать, а сделать мы можем вот что: Как картинка становится приложением или наоборот?

Да очень просто мы просто ставим ложное расширение .jpg и меняем иконку приложения на картинку, будто бы после клика мы увидим её целиком. Всё это крайней степени не профессионально, так как более или менее подкованный человек поймет что произошло, а как сделать так чтобы не понял даже квалифицированный профи, об этом я расскажу в следующем посту.

Показать полностью
Отличная работа, все прочитано!