Hogyan lehet kaparni a Wikipédia cikkeket a Python segítségével

Ebben a cikkben egy webkaparót fogok létrehozni a Pythonban, amely a Wikipedia oldalakat kaparja.

A lehúzó egy Wikipedia oldalra lép, lekaparja a címet, és egy véletlenszerű linket követ a következő Wikipedia oldalra.

Szerintem szórakoztató lesz látni, hogy a Wikipedia milyen véletlenszerű oldalakat látogat meg ez a kaparó!

A lehúzó beállítása

Először létrehozok egy új python fájlt scraper.py:

touch scraper.py

A HTTP kéréshez a requestskönyvtárat fogom használni . A következő paranccsal telepítheti:

pip install requests

Használjuk kiindulópontként a webes lapozó wiki oldalt:

import requests response = requests.get( url="//en.wikipedia.org/wiki/Web_scraping", ) print(response.status_code) 

A lehúzó futtatásakor 200 állapotkódot kell megjelenítenie:

python3 scraper.py 200

Rendben, eddig nagyon jó! ?

Adatok kinyerése az oldalról

Bontsuk ki a címet a HTML oldalról. Az életem megkönnyítése érdekében a BeautifulSoup csomagot fogom használni erre.

pip install beautifulsoup4

A Wikipedia oldal átvizsgálásakor látom, hogy a címke #firstHeadingazonosítóval rendelkezik.

A gyönyörű leves lehetővé teszi, hogy elemet találjon az azonosító címke alapján.

title = soup.find(id="firstHeading")

Az egészet összefogva a program most így néz ki:

import requests from bs4 import BeautifulSoup response = requests.get( url="//en.wikipedia.org/wiki/Web_scraping", ) soup = BeautifulSoup(response.content, 'html.parser') title = soup.find(id="firstHeading") print(title.string) 

És ennek futtatásakor megmutatja a Wiki cikk címét:?

python3 scraper.py Web scraping

Más linkek lekaparása

Most mélyen belemerülök a Wikipédiába. Fogok egy véletlenszerű címkét egy másik Wikipedia cikkhez, és összekaparom azt az oldalt.

Ehhez gyönyörű levest fogok használni, hogy megtaláljam az összes címkét a wiki cikkben. Aztán összekeverem a listát, hogy véletlenszerű legyen.

import requests from bs4 import BeautifulSoup import random response = requests.get( url="//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)

Amint láthatja, a fő cikkben soup.find(id="bodyContent").find_all("a")található összes címke megtalálásához használom a .

Mivel csak más wikipédia-cikkekre mutató linkek érdekelnek, gondoskodom arról, hogy a link tartalmazza az /wikielőtagot.

A program futtatásakor egy másik wikipédia-cikkre mutató link jelenik meg, jó!

python3 scraper.py Link farm

Végtelen kaparó létrehozása

Rendben, tegyük a kaparóba az új linket.

Ehhez mindent áthelyezek egy scrapeWikiArticlefunkcióba.

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("//en.wikipedia.org" + linkToScrape['href']) scrapeWikiArticle("//en.wikipedia.org/wiki/Web_scraping")

A scrapeWikiArticlefüggvény megkapja a wiki cikket, kibontja a címet és talál egy véletlenszerű linket.

Ezután scrapeWikiArticleújból felhívja az új linket. Így a Scraper végtelen ciklusát hozza létre, amely a wikipédián ugrál.

Futtassuk a programot, és nézzük meg, mit kapunk:

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  Eleventh Edition Geography Gender studies Feminism in Brazil

Félelmetes, nagyjából 10 lépésben a "Web Scraping" -től a "Feminism in Brazil" -ig mentünk. Elképesztő!

Következtetés

A Pythonban egy webkaparót építettünk, amely véletlenszerű Wikipédia-oldalakat kapar. Véletlen linkek követésével végtelenül ugrál a Wikipédián.

Ez egy szórakoztató trükk, és a Wikipedia meglehetősen engedékeny a webes kaparás terén.

Olyan webhelyeket is nehezebb kaparni, mint az Amazon vagy a Google. Ha meg szeretné kaparni egy ilyen weboldalt, akkor fel kell állítania egy rendszert fej nélküli Chrome böngészőkkel és proxy szerverekkel. Vagy használhat olyan szolgáltatást, amely kezeli mindazt, ami tetszik neked.

De ügyeljen arra, hogy ne éljen vissza a webhelyekkel, és csak olyan adatokat kaparjon, amelyeket megkaparhat.

Boldog kódolást!