BeautifulSoup不会返回所有HTML

时间:2013-08-20 03:27:34

标签: python html parsing beautifulsoup

所以我试图提取一行html的值,如下所示:

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

并获得值im:

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'

这意味着beautifulSoup由于某种原因返回NoneType

所以我告诉他把请求返回的HTML发给我,然后我告诉他给我汤,它只有页面的顶部,我不知道为什么

这意味着BS只返回其接收的部分HTML

我的问题是为什么或者如果有一种简单的方法我可以使用正则表达式或其他感谢!

1 个答案:

答案 0 :(得分:1)

这是一个快速基于pyparsing的解决方案演练:

从pyparsing

导入HTML解析助手
>>> 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