2013-08-20 71 views
0

所以我試着去提取一行HTML的,看起來像這樣的值:BeautifulSoup犯規返回所有HTML

<input type="hidden" name="_ref_ck" value="41d875b47692bb0211ada153004a663f"> 

,並獲得價值即時通訊做:

self.ref = soup.find("input",{"name":"_ref_ck"}).get("value") 

及其工作對我很好,但我給了我的一個朋友的程序進行測試,他得到這樣的錯誤:

Traceback (most recent call last): 
    File "C:\Users\Daniel\AppData\Local\Temp\Rar$DI85.192\Invent Manager.py", line 262, in onOK 
    self.main = GUI(None, -1, 'Inventory Manager') 
    File "C:\Users\Daniel\AppData\Local\Temp\Rar$DI85.192\Invent Manager.py", line 284, in __init__ 
    self.inv.Login(log.user) 
    File "C:\Users\Daniel\AppData\Local\Temp\Rar$DI85.192\Invent Manager.py", line 34, in Login 
    self.get_ref_ck() 
    File "C:\Users\Daniel\AppData\Local\Temp\Rar$DI85.192\Invent Manager.py", line 43, in get_ref_ck 
    self.ref = soup.find('input',{'name':'_ref_ck'}).get("value") 
AttributeError: 'NoneType' object has no attribute 'get' 

這意味着臨時t beautifulSoup返回一個NoneType由於某種原因

所以我告訴他發送HTML的請求返回,這很好,然後我告訴他給我的湯,它只有頁面的頂部我無法弄清楚,爲什麼

這意味着BS是隻返回HTML其recieving的一部分

我的問題是,爲什麼或者如果有一個簡單的方法,我可以用正則表達式或別的東西,感謝做到這一點!

+0

不要使用正則表達式的HTML。你使用bs4的後端是什麼? –

+0

我剛纔說過,作爲例子和後端? – Serial

+0

如果原始HTML文件內容已完成,那麼html代碼中可能有一些破碎的標籤? –

回答

1

這裏有一個快速的基於pyparsing的解決方案演練:

導入HTML解析從pyparsing

>>> from pyparsing import makeHTMLTags, withAttribute 

定義你想要的標籤表達助手(起始和結束標記匹配表達式makeHTMLTags回報,你只想要一個起點表達式,所以我們只取第0個返回值)。

>>> inputTag = makeHTMLTags("input")[0] 

只希望有name屬性= "_ref_ck",使用withAttribute爲此過濾

>>> inputTag.setParseAction(withAttribute(name="_ref_ck")) 

現在定義你的樣品輸入,並使用inputTag表達式定義搜索匹配輸入標籤。

>>> html = '''<input type="hidden" name="_ref_ck" value="41d875b47692bb0211ada153004a663f">''' 
>>> tagdata = inputTag.searchString(html)[0] 

請致電tagdata.dump()查看所有解析令牌和可用命名結果。

>>> print (tagdata.dump()) 
['input', ['type', 'hidden'], ['name', '_ref_ck'], ['value', '41d875b47692bb0211ada153004a663f'], False] 
- empty: False 
- name: _ref_ck 
- startInput: ['input', ['type', 'hidden'], ['name', '_ref_ck'], ['value', '41d875b47692bb0211ada153004a663f'], False] 
    - empty: False 
    - name: _ref_ck 
    - tag: input 
    - type: hidden 
    - value: 41d875b47692bb0211ada153004a663f 
- tag: input 
- type: hidden 
- value: 41d875b47692bb0211ada153004a663f 

使用tagdata.value得到value屬性:

>>> print (tagdata.value) 
41d875b47692bb0211ada153004a663f