CoderCastrov logo
CoderCastrov
Википедия

Как парсить Википедию с помощью Python Scrapy

Как парсить Википедию с помощью Python Scrapy
просмотров
3 мин чтение
#Википедия

Scrapy - один из самых удобных инструментов, которые вы можете использовать для парсинга и обхода веб-сайта с легкостью.

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

Вот URL, с которого мы собираемся парсить данные https://en.wikipedia.org/wiki/List_of_common_misconceptions,, который предоставляет список распространенных заблуждений в жизни!

Сначала нам нужно установить scrapy, если вы еще этого не сделали.

pip install scrapy

После установки создайте проект, вызвав команду startproject.

scrapy startproject scrapingproject

Это выведет что-то вроде этого.

New Scrapy project 'scrapingproject', using template directory '/Library/Python/2.7/site-packages/scrapy/templates/project', created in:
    /Applications/MAMP/htdocs/scrapy_examples/scrapingprojectYou can start your first spider with:
    cd scrapingproject
    scrapy genspider example example.com

И создайте структуру папок, как показано ниже.

Теперь перейдите в папку scrapingproject. Вам нужно сделать это дважды, как показано ниже.

cd scrapingproject
cd scrapingproject

Теперь нам нужен паук для обхода страницы Википедии. Для этого мы используем команду genspider, чтобы сказать scrapy создать его для нас. Мы называем паука ourfirstbot и передаем ему URL страницы Википедии.

scrapy genspider ourfirstbot [https://en.wikipedia.org/wiki/List_of_common_misconceptions](https://en.wikipedia.org/wiki/List_of_common_misconceptions)

Это должно успешно вернуться, как показано ниже.

Created spider 'ourfirstbot' using template 'basic' in module:
  scrapingproject.spiders.ourfirstbot

Отлично. Теперь откройте файл ourfirstbot.py в папке паука. Он должен выглядеть так.

# -*- coding: utf-8 -*-
import scrapy
class OurfirstbotSpider(scrapy.Spider):
    name = 'ourfirstbot'
    start_urls = ['https://en.wikipedia.org/wiki/List_of_common_misconceptions']    def parse(self, response):
        pass

Давайте рассмотрим этот код, прежде чем продолжить.

Массив allowed_domains ограничивает обход только до указанных здесь доменных путей.

start_urls - это список URL-адресов для обхода. В данном примере нам нужен только один URL.

Функция def parse(self, response): вызывается scrapy после каждого успешного обхода URL. Здесь мы можем написать код для извлечения нужных нам данных.

Теперь нам нужно найти CSS-селектор элементов, из которых мы хотим извлечь данные. Перейдите по URL en.wikipedia.org и щелкните правой кнопкой мыши на одном из заголовков данных Википедии, а затем нажмите "Исследовать". Это откроет инспектор Google Chrome, как показано ниже.

Вы можете видеть, что CSS-класс заголовка элемента - MW-headline, поэтому мы попросим scrapy получить содержимое этого класса следующим образом.

dates = response.css('.mw-headline').extract()

Теперь мы видим, что есть элемент, который перечисляет все элементы содержимого в виде маркированного списка, поэтому давайте получим его с помощью следующего селектора.

Теперь мы видим, что есть элемент, который перечисляет все элементы содержимого в виде маркированного списка, поэтому давайте получим его с помощью следующего селектора.

  • С миллионами прокси-серверов высокой скорости, расположенных по всему миру
  • С нашей автоматической сменой IP
  • С нашей автоматической сменой User-Agent-String (которая имитирует запросы от разных действительных веб-браузеров и версий веб-браузеров)
  • С нашей автоматической технологией решения CAPTCHA

Сотни наших клиентов успешно решили проблему блокировки IP с помощью простого API.

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

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

curl "http://api.proxiesapi.com/?key=API_KEY&url=https://example.com"

У нас есть работающее предложение 1000 бесплатных API-вызовов. Зарегистрируйтесь и получите свой бесплатный API-ключ здесь.

После получения API_KEY от Proxies API вам нужно просто изменить свой код на следующий.

# -*- coding: utf-8 -*-
import scrapy
from bs4 import BeautifulSoup
import urllib


class OurfirstbotSpider(scrapy.Spider):
    name = 'ourfirstbot'
    start_urls = [
        'http://api.proxiesapi.com/?key=API_KEY&url=https://en.wikipedia.org/wiki/List_of_common_misconceptions',
    ]

    def parse(self, response):
        #yield response
        headings = response.css('.mw-headline').extract()       
        datas = response.css('ul').extract()       

        
        for item in zip(headings, datas):
            all_items = {
                'headings' : BeautifulSoup(item[0]).text,
                'datas' : BeautifulSoup(item[1]).text,


            }


            yield all_items

Мы только изменили одну строку в массиве start_urls, и это гарантирует, что нам больше никогда не придется беспокоиться о смене IP, смене строки пользовательского агента или даже о лимитах скорости.

Блог был опубликован здесь: https://www.proxiesapi.com/blog/how-to-scrape-wikipedia-using-python-scrapy.html.php