Python美丽的汤 - 获取输入值

时间:2017-09-03 21:55:59

标签: python bs4

我的计划是能够使用Bs4获取_AntiCsrfToken。

我有这个HTML,我的HTML来自enter image description here

我在代码中写的是

token = soup.find('input', {'name':'_AntiCsrfToken'})['value'])
print(token)

但它给我一个错误说

    Traceback (most recent call last):
  File "C:\Users\HelloWorld.py", line 67, in <module>
    print(soup.find('input', {'name':'_AntiCsrfToken'})['value'])
  File "C:\Python\lib\site-packages\bs4\element.py", line 1292, in find
    l = self.find_all(name, attrs, recursive, text, 1, **kwargs)
AttributeError: 'str' object has no attribute 'find_all'

我完全不理解我是否做得对。我认为我做得对,但也许我需要先从form-id找到它,而不是直接进入隐藏状态?

2 个答案:

答案 0 :(得分:1)

我不确定错误在哪里,但我已经制作了一个小的html文件并将其放在我的服务器上,我没有问题复制和粘贴你的代码..

唯一明显的区别(如果你还没有)是我正在使用请求将html解析为BS4

我想也许这是一个解析问题。

HTML

<html>

<form action="process">
<input type="hidden" name="_AntiCsrfToken" value="5435434354353453545">

</form>
</html>

的Python:

from bs4 import BeautifulSoup as bs4
import requests

r = requests.get('http://maffaz.com/so.html')
html_bytes = r.text
soup = bs4(html_bytes, 'lxml')
token = soup.find('input', {'name':'_AntiCsrfToken'})['value']
print(token)

返回:

5435434354353453545

你也不需要

{'name':'_AntiCsrfToken'}

这样:

token = soup.find('input')['value']

会工作

答案 1 :(得分:0)

也许尝试使用CSS selectors

from bs4 import BeautifulSoup

html = """
<html>
<input type="hidden" name="_AntiCsrfToken" value="5435434354353453545">
</html>
"""

soup = BeautifulSoup(html, 'lxml')
csrf = soup.select_one('input[name=_AntiCsrfToken]')['value']
print(csrf)

输出:5435434354353453545