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

Как соскрести статьи в Википедии с Python

Автор оригинала: 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. Если вы хотите соскребать такой сайт, вы должны настроить систему с Безголовые браузеры хромированные и прокси-серверы. Или вы можете использовать услугу, которая обрабатывает все, что для вас Как этот Отказ

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

Счастливое кодирование!