Python 美化组查找属性内部的文本

Python 美化组查找属性内部的文本,python,beautifulsoup,Python,Beautifulsoup,正如标题所说,我正试图找出如何使用BeautifulSoup查找属性内部的文本,让我们看看下面的示例,给出html: <html> <head> </head> <body> <input class="form-control" name="searchString" type="text" value="myString"/> <h2> your string is myStri

正如标题所说,我正试图找出如何使用BeautifulSoup查找属性内部的文本,让我们看看下面的示例,给出html:

<html>
   <head>
   </head>
   <body>
      <input class="form-control" name="searchString" type="text" value="myString"/>
      <h2> your string is myString</h2>
   </body>
</html>
但不幸的是,它只返回一个结果

[' your string is myString']
忽略包含我在其value属性中搜索的字符串的输入。 有什么建议吗? 提前谢谢


如果我不知道我的字符串出现在value属性中,是否有任何通用的方法来获取标记?它可能出现在任何其他属性中,甚至出现在onClick事件中。例如,如何在不知道字符串出现在何处的情况下搜索字符串? 对于这个例子,我必须编写
soup.find_all(onclick=re.compile(“myString”))


谢谢

它会找到包含该项目的标签

现在,您需要查看结果并从中提取所需的字符串

这就是bs的设计——允许您在标记中找到完全不同的内容

import bs4
import re
html = """
<html>
   <head>
   </head>
   <body>
      <input class="form-control" name="searchString" type="text" value="myString"/>
      <h2> your string is myString</h2>
   </body>
</html>"""
soup = bs4.BeautifulSoup(html)
results = soup.find_all(text=re.compile("myString"))
print([re.findall("myString", result) for result in results])  # <-- here is where you iterate through the results

results.extend(soup.find_all('input', {"class":"form-control"}))  # Useful for divs, etc.
print(results[-1]['value'])
# This second set of results can be subscripted
导入bs4
进口稀土
html=”“”
你的字符串是myString
"""
soup=bs4.BeautifulSoup(html)
结果=soup.find_all(text=re.compile(“myString”))

print([re.findall(“myString”,result)用于result in results])#它查找包含该项的标记

现在,您需要查看结果并从中提取所需的字符串

这就是bs的设计——允许您在标记中找到完全不同的内容

import bs4
import re
html = """
<html>
   <head>
   </head>
   <body>
      <input class="form-control" name="searchString" type="text" value="myString"/>
      <h2> your string is myString</h2>
   </body>
</html>"""
soup = bs4.BeautifulSoup(html)
results = soup.find_all(text=re.compile("myString"))
print([re.findall("myString", result) for result in results])  # <-- here is where you iterate through the results

results.extend(soup.find_all('input', {"class":"form-control"}))  # Useful for divs, etc.
print(results[-1]['value'])
# This second set of results can be subscripted
导入bs4
进口稀土
html=”“”
你的字符串是myString
"""
soup=bs4.BeautifulSoup(html)
结果=soup.find_all(text=re.compile(“myString”))

打印([re.findall(“myString”,result)用于结果中的结果])#用于搜索值属性中的文本,请将
text
更改为
value

results = soup.find_all(value=re.compile("myString"))
for r in results:
   # print(r)
   print('value: ' + r.get('value'))
请注意,
您的字符串是myString
不是文本属性,它是
textContent
或只是
text

要搜索标签中是否包含任何文本或属性,请将
bs4.element
转换为字符串或
outerHTML

results= soup.find_all(True)
for r in results:
   if 'myString' in str(r):
       print(r)
       # <input class="form-control" name="searchString" type="text" value="myString"/>
       # <h2> your string is myString</h2>
results=soup.find_all(True)
对于结果中的r:
如果str(r)中的'myString':
印刷品(r)
# 
#你的字符串是myString
如果仅在任何属性中

# <input class="myString bold" name="searchString" type="text" value="myString"/> 

results = soup.find_all(True)
for r in results:
    for attr in r.attrs:
        attrValue = r[attr]
        if 'class' == attr:
            attrValue = ' '.join(attrValue)
        if 'myString' in attrValue:
            print('%s : %s' % (attr, attrValue))
            # class : myString bold
            # value : myString
#
结果=汤。全部查找(真)
对于结果中的r:
对于r.attrs中的attr:
属性值=r[attr]
如果“类”==属性:
attrValue=''.join(attrValue)
如果属性值中有“myString”:
打印(“%s:%s%”(属性,属性值))
#类别:myString bold
#值:myString

要搜索值属性内的文本,请将
文本
更改为

results = soup.find_all(value=re.compile("myString"))
for r in results:
   # print(r)
   print('value: ' + r.get('value'))
请注意,
您的字符串是myString
不是文本属性,它是
textContent
或只是
text

要搜索标签中是否包含任何文本或属性,请将
bs4.element
转换为字符串或
outerHTML

results= soup.find_all(True)
for r in results:
   if 'myString' in str(r):
       print(r)
       # <input class="form-control" name="searchString" type="text" value="myString"/>
       # <h2> your string is myString</h2>
results=soup.find_all(True)
对于结果中的r:
如果str(r)中的'myString':
印刷品(r)
# 
#你的字符串是myString
如果仅在任何属性中

# <input class="myString bold" name="searchString" type="text" value="myString"/> 

results = soup.find_all(True)
for r in results:
    for attr in r.attrs:
        attrValue = r[attr]
        if 'class' == attr:
            attrValue = ' '.join(attrValue)
        if 'myString' in attrValue:
            print('%s : %s' % (attr, attrValue))
            # class : myString bold
            # value : myString
#
结果=汤。全部查找(真)
对于结果中的r:
对于r.attrs中的attr:
属性值=r[attr]
如果“类”==属性:
attrValue=''.join(attrValue)
如果属性值中有“myString”:
打印(“%s:%s%”(属性,属性值))
#类别:myString bold
#值:myString

问题是find\u all只返回一个表示标记的结果,因此您的最后一行没有帮助,因为我需要同时获取输入标记,明白了吗。。。道歉。这是两个不同的ASK,应该在两行不同的代码中执行,以便于阅读。对原始响应进行了适当的编辑问题是find_all只返回一个表示标记的结果,因此您的最后一行不会有帮助,因为我需要同时获取输入标记明白了。。。道歉。这是两个不同的ASK,应该在两行不同的代码中执行,以便于阅读。对原始响应进行了适当的编辑如果我不知道我的字符串出现在value属性中,是否有获取标记的通用方法?它可能出现在任何其他属性中,甚至出现在onClick事件中。例如,如何在不知道字符串出现在何处的情况下搜索字符串?谢谢您可以使用
str(tag)
将标记转换为字符串请参见编辑的答案如果我不知道我的字符串出现在value属性中,有没有通用的方法来获取标记?它可能出现在任何其他属性中,甚至出现在onClick事件中。例如,如何在不知道字符串出现在何处的情况下搜索字符串?感谢您可以使用
str(标记)
将标记转换为字符串,请参见编辑的答案