2016-04-07 8 views
1

Ich versuche, diese Website zu analysieren: https://www.scutify.com/stocks.html Ich denke, wegen der Probleme mit Frames (ich bin neu in HTML), die Aktien (wie 1-800-Flowers) nicht angezeigt, wenn ich BeautifulSoup zu analysieren der HTML-Link. So sparte ich es dann als htm-Datei und kann jetzt sehen die BeständeWie verschachtelte Elemente mit BeautifulSoup analysieren?

Die htm-Datei sieht aus wie

<title>Stocks/ETFs Listing - US, Canadian, UK, Australian and Indian Stocks on Scutify</title> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<meta name="description" content="Listing of US, Canadian, UK, Australian and Indian Stocks and ETFs available on Scutify"> 
<meta name="keywords" 
<ul class="company-list list-group" id="us-list"> 
<li class="list-group-item"> 
    <a href="https://www.scutify.com/company.aspx?ticker=FLWS">1-800-Flowers.Com Inc - (FLWS)</a></li> 
<li class="list-group-item"> 
    <a href="https://www.scutify.com/company.aspx?ticker=FOX">21st Century Fox Inc - (FOX)</a></li> 
.... 

ich das Skript versucht, unter

downloadedfile = "C:/Users/vwxyz/Downloads/Stocks_ETFs.htm" 
htm = open(downloadedfile,'r') 
soup = BeautifulSoup(htm) 
stocklist = soup.find("ul",class_= "company-list list-group") 
print(stocklist) 

jedoch dann druckt ein gigantischer Textbündel. Ich möchte nur eine Liste der Bestände, das ist

FLWS 
FOX 
... 

Kann jemand helfen?

+0

Können Sie zeigen, was Sie zurück in der Lagerliste bekommen? –

+0

Wie erhalten Sie Ihre Downloaddatei. Wenn ich es bekommen kann, werde ich in Ihren Code schauen –

+0

http://pastebin.com/QnWhDaby – vwxyz

Antwort

0

Iterieren über die Elemente in der Vektorliste und das Teil in der Klammer extrahieren:

import re 

soup = BeautifulSoup(htm, "html.parser") 

pattern = re.compile(r"\(([A-Z]+)\)$") 
for item in soup.select(".company-list .list-group-item"): 
    match = pattern.search(item.get_text()) 
    if match: 
     print(match.group(1)) 

wo \(([A-Z]+)\)$ würde eine öffnende Klammer mit einem oder mehreren Großbuchstaben (eingefangen in einer Gruppe), gefolgt entsprechen, gefolgt von einer schließenden Klammer am Ende der Zeichenfolge.

+0

wow das hat funktioniert, danke! – vwxyz