0

したがって、次のような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'

これは、beautifulSoup が何らかの理由で NoneType を返していることを意味します

だから私は彼に、リクエストが返ってきた HTML を送ってくれと言いました。それで問題ありませんでした。それからスープをくれと言いました。それはページの上部しかなく、理由がわかりませんでした。

これは、BS が受信した html の一部のみを返していることを意味します。

私の質問は、なぜ、または正規表現または他の何かでこれを行うことができる簡単な方法があるかどうかです。

4

1 に答える 1

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
于 2013-08-20T05:26:44.217 に答える