2017-01-05 3 views
0

Ich habe diesen Code, BeautifulSoup einige Daten von einer Website sollteVerbesserung und Vereinfachung Python BeautifulSoup Code

import requests 
from bs4 import BeautifulSoup 

url = "http://hearthstone.gamepedia.com/Patches" 
page = requests.get(url) 
soup = BeautifulSoup(page.content,"html.parser") 

variable = soup.find('div',{"id":"mw-content-text"}) 
variable = variable.find_all('ul')[2] 
variable = variable.find('li') 
variable = variable.find_all('a')[1] 

print(variable.text) 

Ausgabe werden sammeln verwendet:

Patch 7.0.0.15590 

in dieser Reihenfolge, ich bin in der Lage zu lokalisieren genau die Tags, die ich möchte.

Wie könnte ich dies zu einer einzigen Zeile Code machen, um es zu vereinfachen?

Ich wollte so etwas erreichen, aber es scheint so zu funktionieren.

+0

Post Sie HTML-Code –

+0

Ich sammle dies von einer Website, es ist nicht mein eigenes HTML, aber es sollte mit jedem HTML funktionieren. Ich schaue nur auf die Tatsache, den Code zu vereinfachen, nicht zu sehen, wie es funktioniert. – Zepol

+0

Ohne Kontext bedeutet Code nichts. –

Antwort

0
soup.find_all(href=re.compile(r'/Patch_')) 

aus:

[<a href="/Patch_7.0.0.15590" title="Patch 7.0.0.15590">Patch 7.0.0.15590</a>, 
<a href="/Patch_6.2.0.15300" title="Patch 6.2.0.15300">Patch 6.2.0.15300</a>, 
<a href="/Patch_6.2.0.15181" title="Patch 6.2.0.15181">Patch 6.2.0.15181</a>, 
<a href="/Patch_6.1.3.14830" title="Patch 6.1.3.14830">Patch 6.1.3.14830</a>, 
<a href="/Patch_6.1.1.14406" title="Patch 6.1.1.14406">Patch 6.1.1.14406</a>, 
<a href="/Patch_6.0.0.13921" title="Patch 6.0.0.13921">Patch 6.0.0.13921</a>, 
<a href="/Patch_5.2.2.13807" title="Patch 5.2.2.13807">Patch 5.2.2.13807</a>, 
<a href="/Patch_5.2.0.13740" title="Patch 5.2.0.13740">Patch 5.2.0.13740</a>, 
<a href="/Patch_5.2.0.13714" title="Patch 5.2.0.13714">Patch 5.2.0.13714</a>, 
<a href="/Patch_5.2.0.13619" title="Patch 5.2.0.13619">Patch 5.2.0.13619</a>, 
<a href="/Patch_5.0.0.13030" title="Patch 5.0.0.13030">Patch 5.0.0.13030</a>, 
<a href="/Patch_5.0.0.12574" title="Patch 5.0.0.12574">Patch 5.0.0.12574</a>, 
<a href="/Patch_4.3.0.12266" title="Patch 4.3.0.12266">Patch 4.3.0.12266</a>, 
<a href="/Patch_4.2.0.12051" title="Patch 4.2.0.12051">Patch 4.2.0.12051</a>, 
<a href="/Patch_4.1.0.10956" title="Patch 4.1.0.10956">Patch 4.1.0.10956</a>, 
<a href="/Patch_4.0.0.10833" title="Patch 4.0.0.10833">Patch 4.0.0.10833 - The League of Explorers</a>, 
<a href="/Patch_3.2.0.10604" title="Patch 3.2.0.10604">Patch 3.2.0.10604</a>, 
<a href="/Patch_3.1.0.10357" title="Patch 3.1.0.10357">Patch 3.1.0.10357</a>, 
<a href="/Patch_3.0.0.9786" title="Patch 3.0.0.9786">Patch 3.0.0.9786 - The Grand Tournament Draws Near</a>, 
<a href="/Patch_2.8.0.9554" title="Patch 2.8.0.9554">Patch 2.8.0.9554</a>, 
<a href="/Patch_2.7.0.9166" title="Patch 2.7.0.9166">Patch 2.7.0.9166</a>, 
<a href="/Patch_2.6.0.8834" title="Patch 2.6.0.8834">Patch 2.6.0.8834</a>, 

Verwendung re die einen Tag Sie wollen fileter.

Es gibt fünf filters, die in der find() oder find_all() verwendet werden können:

  1. Ein String
  2. Ein regulärer Ausdruck
  3. Eine Liste
  4. Wahre
  5. Eine Funktion