beautifulsoup Handledning
Komma igång med vackursoup
Sök…
Anmärkningar
I det här avsnittet diskuterar vi vad vackra soppa är, vad den används till och en kort beskrivning av hur man ska använda sig av den.
Beautiful Soup är ett Python-bibliotek som använder din förinstallerade html / xml-parser och konverterar webbsidan / html / xml till ett träd som består av taggar, element, attribut och värden. För att vara mer exakt består trädet av fyra typer av objekt, Tag, NavigableString, BeautifulSoup och Kommentar. Detta träd kan sedan "fråges" med hjälp av metoderna / egenskaperna för det vackraSoup-objektet som skapas från parser-biblioteket.
Ditt behov: Ofta kan du ha ett av följande behov:
Du kanske vill analysera en webbsida för att avgöra, hur många av vilka taggar som finns, hur många element i varje tagg som finns och deras värden. Du kanske vill ändra dem.
Du kanske vill bestämma elementnamn och värden, så att du kan använda dem i samband med andra bibliotek för automatisering av webbsidor, till exempel Selenium .
Du kanske vill överföra / extrahera data som visas på en webbsida till andra format, till exempel en CSV-fil eller till en relationsdatabas som SQLite eller mysql. I detta fall hjälper biblioteket dig med det första steget, att förstå strukturen på webbsidan, även om du kommer att använda andra bibliotek för att göra överföringen.
Du kanske vill ta reda på hur många element som är utformade med en viss CSS-stil och vilka.
Sekvens för typisk grundläggande användning i din Python-kod:
Importera det vackra soppa-biblioteket
Öppna en webbsida eller html-text med BeautifulSoup-biblioteket genom att nämna vilken tolkare som ska användas. Resultatet av detta steg är ett BeautifulSoup-objekt. (Obs! Det här namnet på den parser som anges måste vara installerat redan som en del av dina Python-paket. Till exempel,
html.parser
, är ett inbyggt "med-batterier" -paket som levereras med Python. Du kan installera andra parsers somlxml
ellerhtml5lib
.)"Fråga" eller sök i BeautifulSoup-objektet med syntaxen
'object.method'
och få resultatet till en samling, till exempel en Python-ordlista. För vissa metoder kommer utgången att vara ett enkelt värde.Använd resultatet från föregående steg för att göra vad du vill göra med det i resten av din Python-kod. Du kan också ändra elementvärdena eller attributvärdena i trädobjektet. Ändringar påverkar inte källan till html-koden, men du kan ringa utmatningsformateringsmetoder (till exempel
prettify
) för att skapa ny utgång från BeautifulSoup-objektet.
Vanliga metoder: Vanligtvis används metoderna .find
och .find_all
för att söka i trädet, vilket ger inmatningsargument.
Inmatningsargumenten är: taggnamnet som söks, attributnamn och andra relaterade argument. Dessa argument kan presenteras som: en sträng, ett regelbundet uttryck, en lista eller till och med en funktion.
Vanliga användningar av BeautifulSoup-objektet inkluderar:
- Sök efter CSS-klass
- Sök efter Hyperlink-adress
- Sök efter element-id, tagg
- Sök efter attributnamn. Attributvärde.
Om du har ett behov av att filtrera trädet med en kombination av ovanstående kriterier, kan du också skriva en funktion som utvärderar till sann eller falsk och söka efter den funktionen.
versioner
Version | Anmärkningar | Paketnamn | Utgivningsdatum |
---|---|---|---|
3.x | Version 3.2.1; Endast Python 2 | beautifulsoup | 2012-02-16 |
4.x | Version 4.5.0; Python 2 och 3 | beautifulsoup4 | 2016/07/20 |
Installation eller installation
pip kan användas för att installera BeautifulSoup. Kör kommandot för att installera version 4 av BeautifulSoup:
pip install beautifulsoup4
Var medveten om att paketnamnet är beautifulsoup4
istället för beautifulsoup
, det senare namnet står för gammal släpp, se gamla beautifulsoup
Ett skrapande exempel på "Hello World" på BeautifulSoup
from bs4 import BeautifulSoup
import requests
main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")
# Finding the main title tag.
title = soup.find("h1", class_ = "firstHeading")
print title.get_text()
# Finding the mid-titles tags and storing them in a list.
mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")]
# Now using css selectors to retrieve the article shortcut links
links_tags = soup.select("li.toclevel-1")
for tag in links_tags:
print tag.a.get("href")
# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
id = "mw-panel").find_all("div",
class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]
print blocks_links[0]
Produktion:
"Hello, World!" program
#Purpose
#History
#Variations
#See_also
#References
#External_links
[u'/wiki/Main_Page', u'/wiki/Portal:Contents', u'/wiki/Portal:Featured_content', u'/wiki/Portal:Current_events', u'/wiki/Special:Random', u'https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en', u'//shop.wikimedia.org']
Om du anger din föredragna parser när du startar vacker soppa undviks den vanliga Warning
förklarar att no parser was explicitely specified
.
Olika metoder kan användas för att hitta ett element i webbsidan.
Även om en handfull andra metoder finns, är CSS classes
och CSS selectors
två praktiska sätt att hitta element i trädet.
Det bör noteras att vi kan leta efter taggar genom att ställa in deras attributvärde till True när du söker efter dem.
get_text()
tillåter oss att hämta text som finns i en tagg. Den returnerar den som en enda Unicode-sträng. tag.get("attribute")
gör det möjligt att få taggens attributvärde.