2016-07-29 3 views
2

私はBeautifulsoupを使ってHTML内の特定の番号を検索していますが、ここではまってしまいました。セミコロンで区切られた文字列からdictを生成する方法は?

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=''; "> 

と「bookmarkable_id」を抽出します。

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

それは私にはセミコロンで区切られた単語の文字列を返します。

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

をしかし、私はここから抽出することができますかわかりません。助けてください!

答えて

4

これを試してみてください:

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) 

を与える:

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

あなたはquestionID_line、

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

Thx!実際、私はBeautifulsoupの中でいくつかの解決策を見つけようとしていました。 しかし、とにかくそれは仕事をします! – Houken

1

使用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(";")} 

出力

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

は、ご希望の出力に応じてstrip()変更する自由を感じます。

0

は試してみてください。この

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

あなたは最後"; "が分割などのエラーが発生します解凍しようとして削除しない場合最後に奇妙な空の文字列を残します:

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("; ")) 
関連する問題