使用Python使用请求和bs4 Lib从HTML中删除隐藏的值

时间:2014-09-17 00:47:06

标签: python html web-scraping beautifulsoup captcha

我正在尝试从具有以下格式代码的html源代码中删除Captcha代码。

<div id="Custom"><!-- test: vdfnhu --></div>

验证码随每次刷新而变化。我的目的是捕获验证码及其验证码,以便发布到表单。

到目前为止我的代码是:

import requests
import urlparse
import lxml.html
import sys
from bs4 import BeautifulSoup

print "Enter the URL",
url = raw_input()
r = requests.get(url)
c = r.content
soup = BeautifulSoup(c)
div = soup.find('div' , id ='Custom')
comment = next(div.children)
test = comment.partition(':')[-1].strip()
print test

1 个答案:

答案 0 :(得分:1)

正如the documentation所解释的那样,BeautifulSoup有NavigableStringComment个对象,就像Tag个对象一样,他们都可以是孩子,兄弟姐妹等。{{3}有更多细节。

所以,你想找到div'Custom':

div = soup.find('div', id='Custom'}

然后你想找到find Comment孩子:

comment = next(child for child in div.children if isinstance(child, bs4.Comment))

虽然如果格式与您呈现的格式一样固定且不变,您可能希望将其简化为next(div.children)。另一方面,如果它变量更大,您可能希望迭代所有 Comment个节点,而不只是抓住第一个节点。

并且,因为Comment基本上只是一个字符串(如同,它支持所有str方法):

test = comment.partition(':')[-1].strip()

把它放在一起:

>>> html = '''<html><head></head>
...           <body><div id="Custom"><!-- test: vdfnhu --></div>\n</body></html>'''
>>> soup = bs4.BeautifulSoup(html)
>>> div = bs4.find('div', id='Custom')
>>> comment = next(div.children)
>>> test = comment.partition(':')[-1].strip()
>>> test
'vdfnhu'