Автор оригинала: Dirk Hoekstra.
В этой статье я собираюсь создать веб-скребок в Python, который будет соскрести страницы Wikipedia.
Скребок перейдет на страницу Википедии, соскреблируйте заголовок и следуют случайной ссылке на следующую страницу Wikipedia.
Я думаю, что будет весело посмотреть, какие случайные страницы Wikipedia этот скребок будет посещать!
Настройка скребка
Чтобы начать, я собираюсь создать новый файл Python под названием Scraper.py
:
touch scraper.py
Чтобы сделать HTTP-запрос, я собираюсь использовать Запросы
библиотека. Вы можете установить его со следующей командой:
pip install requests
Давайте будем использовать страницу Wiki Wiki в качестве нашей отправной точки:
import requests response = requests.get( url="https://en.wikipedia.org/wiki/Web_scraping", ) print(response.status_code)
При запуске скребка его следует отобразить код состояния 200:
python3 scraper.py 200
Хорошо, пока так хорошо! ?
Извлечение данных со страницы
Давайте вытекаем название на странице HTML. Чтобы облегчить мою жизнь, я собираюсь использовать пакет CountrySoup для этого.
pip install beautifulsoup4
При проверке страницы Wikipedia я вижу, что тег заголовка имеет #firstheading
Я БЫ.
Красивый суп позволяет найти элемент по тегу ID.
title = soup.find(id="firstHeading")
Принося все вместе, программа теперь выглядит так:
import requests from bs4 import BeautifulSoup response = requests.get( url="https://en.wikipedia.org/wiki/Web_scraping", ) soup = BeautifulSoup(response.content, 'html.parser') title = soup.find(id="firstHeading") print(title.string)
И при запуске этого он показывает название статьи Wiki:?
python3 scraper.py Web scraping
Скаивание других ссылок
Теперь я собираюсь погрузиться глубоко в Википедию. Я собираюсь схватить случайных Тег на другую статью Википедию и соскрести эту страницу.
Для этого я буду использовать красивый суп, чтобы найти все Теги в пределах статьи вики. Затем я перемешаю список, чтобы сделать это случайным.
import requests from bs4 import BeautifulSoup import random response = requests.get( url="https://en.wikipedia.org/wiki/Web_scraping", ) soup = BeautifulSoup(response.content, 'html.parser') title = soup.find(id="firstHeading") print(title.content) # Get all the links allLinks = soup.find(id="bodyContent").find_all("a") random.shuffle(allLinks) linkToScrape = 0 for link in allLinks: # We are only interested in other wiki articles if link['href'].find("/wiki/") == -1: continue # Use this link to scrape linkToScrape = link break print(linkToScrape)
Как вы можете видеть, я использую SUP.FIND (ID = «BodyContent»). find_all ("a")
Чтобы найти все Теги в рамках основной статьи.
Поскольку я заинтересован только ссылками на другие статьи Википедии, я уверен, что ссылка содержит /wiki
приставка.
При запуске программы теперь отображается ссылка на другую статью Wikipedia, приятно!
python3 scraper.py Link farm
Создание бесконечного скребка
Хорошо, давайте сделаем скребок на самом деле Scrape новую ссылку.
Для этого я собираюсь переместить все в ScrapequikiArticle
функция.
import requests from bs4 import BeautifulSoup import random def scrapeWikiArticle(url): response = requests.get( url=url, ) soup = BeautifulSoup(response.content, 'html.parser') title = soup.find(id="firstHeading") print(title.text) allLinks = soup.find(id="bodyContent").find_all("a") random.shuffle(allLinks) linkToScrape = 0 for link in allLinks: # We are only interested in other wiki articles if link['href'].find("/wiki/") == -1: continue # Use this link to scrape linkToScrape = link break scrapeWikiArticle("https://en.wikipedia.org" + linkToScrape['href']) scrapeWikiArticle("https://en.wikipedia.org/wiki/Web_scraping")
ScrapequikiArticle
Функция получит статью Wiki, извлечь заголовок и найдите случайную ссылку.
Тогда это позвонит ScrapequikiArticle
снова с этой новой ссылкой. Таким образом, он создает бесконечный цикл скребка, который подпрыгивает на Википедии.
Давайте запустим программу и посмотрим, что мы получаем:
pythron3 scraper.py Web scraping Digital object identifier ISO 8178 STEP-NC ISO/IEC 2022 EBCDIC 277 Code page 867 Code page 1021 EBCDIC 423 Code page 950 G R Mole (unit) Gram Remmius Palaemon Encyclopædia Britannica Eleventh Edition Geography Gender studies Feminism in Brazil
Потрясающе, в примерно 10 шагов мы отправились из «Web Scraping» к «феминизму в Бразилии». Удивительный!
Заключение
Мы построили веб-скребок в Python, что царапины случайных страниц Википедии. Он подпрыскивает бесконечно на Википедии, следуя случайными ссылками.
Это забавный трюк и Википедия довольно снисходительна, когда дело доходит до веб-соска.
Также все труднее соскрести веб-сайты, такие как Amazon или Google. Если вы хотите соскребать такой сайт, вы должны настроить систему с Безголовые браузеры хромированные и прокси-серверы. Или вы можете использовать услугу, которая обрабатывает все, что для вас Как этот Отказ
Но будьте осторожны, чтобы не злоупотреблять веб-сайтами и только царапать данные, которые вам разрешено царапать.
Счастливое кодирование!