Рубрики
Без рубрики

Web Scraping: Управляющие прокси и капча с помощью SCRAPY и скребковым API

Первоначально опубликовано на моем сайте В первой и второй части этой серии мы представили наши … Tagged с запуском, учебником, JavaScript, Python.

Техника Scraping Web с Python (4 частью серии)

Первоначально опубликовано на мой веб-сайт

В Первый и Второй Частью этой серии мы представили себя веб-соскабливанием, а методы можно подать заявку на достижение этой задачи. Мы сделали это с Beautifulsoup и Selenium Python библиотеки. Проверьте их, если вы еще этого не сделали.

В этой последней части серии Web Scraping мы будем изучать Scrapy Library, API скребка и получить понимание необходимости использования этих инструментов.

Для этого пошаговать, мы будем царапать данные из moviedb Веб-сайт. Это просто пример, поскольку они предоставляют API, если вы хотите любой из их данных. Найти код на Github Отказ

Почему сценапия?

Scrapy – это библиотека Python с открытым исходным кодом. Scrapy позволяет выполнять веб-сайты одновременно без необходимости иметь дело с потоками, процессами, синхронизацией или чем-либо еще. Он обрабатывает ваши запросы асинхронно, и это действительно быстро. Если вы хотите что-то вроде этого в вашем пользовательском гусенике, вам придется реализовать его самостоятельно или использовать асинхронитую библиотеку.

Для получения более подробной информации об этой теме проверьте это пост Отказ

Почему скребок API?

Обратите внимание, что некоторые ссылки ниже являются партнерскими ссылками и без дополнительных расходов для вас. Знайте, что я рекомендую только продукты, инструменты и услуги учебных услуг, которые я лично использовал и верю, что искренне полезно. Больше всего я бы никогда не защищал, чтобы покупать то, что вы не можете себе позволить или что вы не готовы реализовать.

Scraper API – это стартап, специализирующийся на стратегиях, которые будут ослабить беспокойство о вашем IP-адресе от блокировки во время соскабливания веб-сигналов. Они используют вращение IP, чтобы избежать обнаружения. Хвастаться более 20 миллионов IP-адресов и неограниченной пропускной способности. В дополнение к этому, они обеспечивают обработку CAPTCHA для вас, а также включить беговый браузер, чтобы вы по-видимому, являетесь настоящим пользователем, а не обнаружены в виде веб-скребка. Использование не ограничивается кляпии, но работает с запросами, красивыми и селенами в экосистеме Python. Интеграция с другими популярными платформами, такими как node.js, bash, php и ruby, также поддерживается. Все, что вам нужно сделать, это объединить свой целевой URL-адрес с их конечной точкой API на запросе HTTP Get, затем продолжайте, как обычно на любом веб-скребке. В этом проходе я выделим, как это сделать.

Используя это Этот скребок API ссылка А промо-код Lewis10 вы получите скидку 10% на первую покупку !! Вы всегда можете начать на их щедрый бесплатный план и обновить, когда возникает необходимость.

1.Setting

Для начала начать, нам нужно установить сценальную библиотеку. Бегать

pip install scrapy

Позже, отправляйтесь на Сайт API скребка и получить ключ API. Нам понадобится это получить доступ к своим услугам очень простым способом. Так держись крепко.

инициирование проекта

С этими двумя шагами мы должны быть все настроены, чтобы сделать веб-сканет. Беги Python Scrapy StartProject ProjectName

Это создаст наш проект, который будет инициализировать со следующей структурой.

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

Весь весь код появится так.

from scrapy import Spider
from ..items import GetmoviesItem
from .config import API_KEY

class moviesCrawl(Spider):
    name="movies"
    page_number=15

    url_link="https://www.themoviedb.org/movie?page=1"

    start_urls=['http://api.scraperapi.com/?api_key='+ API_KEY + '&url=' + url_link + '&render=true']

    def parse(self,response):
        movies=response.css("div.item.poster.card")
        items=GetmoviesItem()
        for movie in movies:
            items["title"]=movie.css('.title.result::text').extract()
            items["rating"]=movie.css(".user_score_chart::attr(data-percent)").extract()
            items["description"]=movie.css(".overview::text").extract()
            items["poster_link"]=movie.css('.poster.lazyload.fade::attr(data-src)').extract()

            yield items


        next_page_url = + str(self.page_number)
        next_page='http://api.scraperapi.com/?api_key='+ API_KEY + '&url='+ next_page_url + '&render=true'

        if self.page_number<=15:
            self.page_number+=1
            yield response.follow(next_page,callback=self.parse)

Может выглядеть немного страшно, но мы пройдем через его линию по линии.

Первые три строки – импорт библиотеки и элементы, которыми нам нужно будет эффективно создать функционирующий веб-сканер.

from scrapy import  Spider
from ..items import GetmoviesItem
from .config import API_KEY

На данный момент не беспокойтесь о импорте GetMoviSiteM, мы доберемся до этого в ближайшее время. Я создал отдельный файл, где я сохранил любые конфигурации. В этом случае это был ключ API, который мы получили от API скребка.

class moviesCrawl(Spider):
    name="movies"

    url_link="https://www.themoviedb.org/movie?page=1"
    page_number=15

    start_urls=['http://api.scraperapi.com/?api_key='+ API_KEY + '&url=' + url_link + '&render=true']

Вот где все начинает получать интересную. Сначала мы создаем класс MovoCrawl, который наследует от класса Spider, первоначально импортированных в верхней части файла. Этот класс сформирует основу для нашего веб-скребка, и мы укажем поведение веб-скамера отсюда.

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

Что касается переменной URL_LINK, это просто указывает на URL, который мы хотим царапать. Вы заметите, что это пегированное место, и он принимает форму

https://www.themoviedb.org/movie?page={{page_number}}

Этот шаблон будет использоваться переменной Page_ Number для автоматического перемещения скребка на несколько страниц на целевой площадке.

Наконец, переменная start_urls – это ключевое слово в Scrapy. Это список URL, где паук начнет ползти, от того, когда не указаны конкретные URL-адреса. Итак, первые страницы загружены, будут перечислены здесь.

Чтобы мы могли использовать API скребка и использовать его полную мощность 😎, все, что нам просто нужно сделать, это объединить наш URL_Link с конечной точкой API скребком.

http://api.scraperapi.com/?api_key=’+ API_KEY + & Render = True

Опция просто говорит API скребка, чтобы включить рендеринг JavaScript и, следовательно, позволяя загружать браузер без головы. Это то, что мы покрыты с помощью селена, но в упрощенном формате.

def parse(self,response):
        movies=response.css("div.item.poster.card")
        items=GetmoviesItem()
        for movie in movies:
            items["title"]=movie.css('.title.result::text').extract()
            items["rating"]=movie.css(".user_score_chart::attr(data-percent)").extract()
            items["description"]=movie.css(".overview::text").extract()
            items["poster_link"]=movie.css('.poster.lazyload.fade::attr(data-src)').extract()

            yield items

От документации Scrapy,

Метод такого анализа отвечает за обработку ответа и возврата записку данных и/или более URL-адресов.

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

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

Как только мы определили шаблоны в коде веб-страницы, мы можем автоматизировать экстракцию данных. Итак, давайте проверяем эти элементы DOM.

С изображения выше, мы заметим, что каждый элемент фильма прилагается в Div of Classies Pood, Poster и Card. Вооруженные этой информацией, мы поручним гусенику получить все элементы CSS, демонстрирующие эти атрибуты.

Прежде чем мы продолжим, давайте борьбе с классом GetMoviSiteM, который мы импортировали в начале сценария.

from scrapy import Item
class GetmoviesItem(scrapy.Item):
    # define the fields for your item here like:
    title=scrapy.Field()
    rating=scrapy.Field()
    description=scrapy.Field()
    poster_link=scrapy.Field()

После того, как мы заползли данные сайта, нам нужно хранить данные где-то в структурированном формате. Эти предметы объекты являются простыми контейнерами, используемыми для сбора записка данных. Они предоставляют словарь-API с удобным синтаксисом для объявления их доступных полей. Для получения дополнительной информации об этом чеке здесь Отказ

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

Мы все еще теряем? Здорово. Направляем мы движемся.

Переменная предметов будет экземпляром GetMoviSiteM. Отсюда, используя те же имена поля, определенные как наши словарные клавиши, мы можем извлечь и отдельные атрибуты из каждого фильма. Дело в точке, для рейтинговой информации. Этот атрибут хранится в элементе с именем класса user_score_chart. В этом HTML-элементе у нас есть атрибут «Data-Prot», и именно поэтому мы использовали метод ATITR, чтобы получить доступ к хранению данных. Оттуда используют функцию выхода, теперь мы можем получить все необходимые данные.

Для окончательной части кода,

        next_page_url = + str(self.page_number)
        next_page='http://api.scraperapi.com/?api_key='+ API_KEY + '&url='+ next_page_url + '&render=true'

        if self.page_number<=15:
            self.page_number+=1
            yield response.follow(next_page,callback=self.parse)

Мы воспользуемся URL-адресом пагинга, чтобы повторить как можно больше страниц, сколько мы хотим. К счастью, поскольку мы будем подключаться к конечной точке API скребками, мы без риска нашего IP-адреса заблокированы, поскольку они управляли для нас прокси. Тем не менее, я бы осторожно против отправки чрезмерных запросов на целевой сайт во время Web

Наконец, чтобы сохранить информацию, простую, как выполнить любую из этих команд в зависимости от выбранного вами формата файла.

Scrapy Crawl Choins-Filename.csv

SCRAPY TRAWL CLINES-FILENAME.JSON

SCRAPY TRAWL MOLINES-FILENAME.XML

Оценка функций

Особенность прокси

Я проверил эту функцию, используя httpbin И по нескольким запросам вращения IP сработали великолепно. Важно отметить, что время запросов замедляется во время вращения IP и, следовательно, ваш веб-скребок будет работать медленнее, чем обычно.

капча

Чтобы проверить эту функцию, определить веб-сайт с помощью CAPTCHA и запустить скрипт. Отличное место для начала truepeoplesearch который сразу всплывает форму капчи. Вы обнаружите, что API скребка может легко справиться с этим, чтобы вы позволили вам понравиться, как вы бы.

Браузер без головы

Удалив, запустите скрипт на тяжелой площадке JavaScript и обратите внимание на различия. Отличное место для начала – это цитаты, чтобы соскрести JS .

вывод

Надеюсь, вы также можете сделать простым веб-гусеником с помощью SCHAPY и использовать API скребка.

Для большего количества на эту голову к их Документация Страница Чтобы увидеть потрясающие функции, они обеспечивают облегчение некоторых головных болей, которые вы столкнулись с Scraping.

Струпкая документация Отказ

Спасибо за ваше время. Если вы хотите больше этого, подпишитесь на мой рассылка Чтобы получить уведомление всякий раз, когда я делаю новые посты. Хотите пообщаться? Пинг мне на Twitter Отказ

Техника Scraping Web с Python (4 частью серии)

Оригинал: “https://dev.to/lewiskori/web-scraping-managing-proxies-and-captcha-with-scrapy-and-the-scraper-api-2c5b”