2016-07-29 6 views
2

Ich benutze Beautifulsoup, um nach einer bestimmten Nummer in HTML zu suchen, bin aber hier steckengeblieben.Wie erzeuge ich ein Diktat aus einer Zeichenfolge, die durch ein Semikolon getrennt ist?

The raw data is: 

<div class='box_content' hn_bookmark='true' ng_init=" bookmarked=false; bookmark_id=''; bookmarks_path='/en-US/bookmarks'; bookmarkable_id='000000'; bookmarkable_type=''; "> 

und ich möchte die "bookmarkable_id" extrahieren.

bsobj = BeautifulSoup(text,"html.parser") 
questionID_line = bsobj.find("div",{"class":"box_content"})['ng_init'] 

Es gibt mir einen String mit Worten durch ein Semikolon getrennt:

bookmarked=false; bookmark_id=''; bookmarks_path='/en-US/bookmarks'; bookmarkable_id='793447'; bookmarkable_type='Question' 

Aber ich weiß nicht, wie ich von hier extrahieren kann. Bitte helfen Sie!

Antwort

4

Versuchen Sie folgendes:

data = "bookmarked=false; bookmark_id=''; bookmarks_path='/en-US/bookmarks'; bookmarkable_id='793447'; bookmarkable_type='Question'" 

fields = {} 
for f in data.split('; '): 
    k , v = f.split('=') 
    fields[k] = v.strip("'") 

print(fields) 

Gibt:

{'bookmarked': 'false', 'bookmark_id': '', 'bookmarks_path': '/en-US/bookmarks', 'bookmarkable_type': 'Question', 'bookmarkable_id': '793447'} 
1

Sie erneut auf questionID_line suchen können,

import re 
re.findall("bookmarkable_id='(.*?)'", questionID_line) 
+0

Thx! Eigentlich wollte ich in Beautifulsoup eine Lösung finden. Aber trotzdem macht es den Job! – Houken

1

Verwendung split():

data="bookmarked=false; bookmark_id=''; bookmarks_path='/en-US/bookmarks'; bookmarkable_id='793447'; bookmarkable_type='Question'" 
output = {i.split("=")[0].strip():i.split("=")[1].strip() for i in data.split(";")} 

Ausgabe

{'bookmarks_path': "'/en-US/bookmarks'", 'bookmark_id': "''", 'bookmarked': 'false', 'bookmarkable_id': "'793447'", 'bookmarkable_type': "'Question'"} 

Fühlen Sie sich frei strip() nach Ihren gewünschten Ausgang zu ändern.

0

Versuchen Sie, diese

s = """ 
<div class='box_content' hn_bookmark='true' ng_init=" bookmarked=false; bookmark_id=''; bookmarks_path='/en-US/bookmarks'; bookmarkable_id='000000'; bookmarkable_type=''; "> 
""" 

import re 
data = re.findall("bookmark[^=]*='[^']*",s) 

dict1 = {} 
for j in (data): 
    one,two = j.split("=") 
    dict1[one] = two.strip("'") 

print dict1 
0

Wenn Sie nicht entfernen, das letzte "; " versucht, einen Fehler wie Split zu entpacken verursachen wird am Ende eine ungerade leere Zeichenfolge hinterlassen:

from bs4 import BeautifulSoup 
html = """<div class='box_content' hn_bookmark='true' ng_init=" bookmarked=false; bookmark_id=''; bookmarks_path='/en-US/bookmarks'; bookmarkable_id='000000'; bookmarkable_type=''; ">""" 
soup = BeautifulSoup(html) 

s = soup.select_one("div.box_content")['ng_init'] 

d = dict(sub.split("=", 1) for sub in s.strip("; ").split("; ")) 
Verwandte Themen