我正在尝试从具有以下格式代码的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
答案 0 :(得分:1)
正如the documentation所解释的那样,BeautifulSoup有NavigableString
和Comment
个对象,就像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'