2014-10-08 54 views
0

的HTML页面内的CSRF令牌的HTML看起来像这样发现使用Beautifulsoup

<input type="hidden" name="csrfToken" value="ajax:SOME_TOKEN"/> 

我已经试过这几种不同的方式,但我不断收到一个错误。我认为这种方式看起来不错,但显然不是。

soup = BeautifulSoup(html_page) 
soup.find('input', {'name':'csrfToken'}) 

我不断收到:

TypeError: 'expected string or buffer' 

有什么想法?

回答

1

这是从给定输入提取CSRF令牌的一种方式:

from bs4 import BeautifulSoup 

html = '<input type="hidden" name="csrfToken" value="ajax:SOME_TOKEN"/>' 
soup = BeautifulSoup(html) 

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

print token 

运行这样的结果是:

ajax:SOME_TOKEN 

通过看你的榜样,对实际提取html元素似乎是正确的。难道你的html_page没有设置或其他类型的(即不是一个字符串)?

+0

gaaah ..就是这样。我在做BeautifulSoup(r)而不是BeautifulSoup(r.text) – 2014-10-08 21:37:47

+0

这是一个容易犯的错误,很高兴你把它整理出来:) – HAL 2014-10-08 21:39:11