- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有这个 html 代码:
html = """
<div non_class="first"></div>
<h2 style="some_style"> Text 1</h2>
<div non_class="second"></div>
<div non_class="first">Text 2</div>
"""
使用此代码:
from bs4 import BeautifulSoup as bs
soup = bs(html,'lxml')
我转至soup.find_all()
两个参数,一个标签和一个属性/属性值对:
first = soup.find_all('div',non_class='first')
for i in first:
print(i)
将输出:
<div non_class="first"></div>
<div non_class="first">Text 2</div>
足够简单。现在假设我不想硬连接参数,而是想将它们传递给 find_all()
作为变量。基于问题such as this , this , or this ,我使用了这种方法:
my_tag = 'div'
my_att = {'non_class': 'first'}
second = soup.find_all(my_tag,my_att)
for i in second:
print(i)
它会产生正确的输出。但这还远远不能令人满意。我的“目标”标签是 <div non_class="first">
并且(如果一切顺利)它将成为我打算在 for
中使用的目标列表中的一个条目。环形。但是这些答案中提出的方法要求(除非有人有更好的方法!)我将目标分解为其组件:首先是一个标签(在本例中 - div
),然后采用属性/属性值对(在此示例中 non_class="first"
)并将其转换为字典( {'non_class': 'first'}
)并将这两个输入到 find_all(_)
中。这是可行的,但不优雅。
所以我尝试使用一个变量传递整组参数,但是
target = '<div non_class="first">'
third = soup.find_all(target)
什么也没找到。使用 f 字符串来喂养目标:
fourth = soup.find_all(f'{target}')
也失败了。
编辑:澄清一下,练习的目的是将元素提供给 find_all()
无需首先手动或使用辅助函数将其分解为其组成部分。从概念上讲,我想我不明白为什么 find_all()
可以直接将元素作为字符串参数,但如果将字符串分配给变量,find_all()
无法获取该变量并将其重新构成字符串参数...
那么这是可行的,还是我必须屈服于对目标进行切片和切 block ?或者,可以用 Selenium 来完成吗?
最佳答案
提取数据的方法有很多。如果我正确理解用例,下面的选项可能会对您有所帮助。
html = """
<div non_class="first"></div>
<h2 style="some_style"> Text 1</h2>
<div non_class="second"></div>
<div non_class="first">Text 2</div>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
print(soup.find_all(non_class="first"))
find_element = lambda target,soup : soup.find_all(target['tag'],{target['attribute']:target['value']})
target = {'tag':'div','attribute':'non_class','value':'first'}
print(find_element(target,soup))
target = {'non_class': 'first'}
print(soup.find_all(attrs=target))
print(soup.find_all(non_class="first"))
甚至您可以实现如下所示的方法,将 html 标记作为字符串并返回目标值。
def get_element(selector_string,soup):
element = BeautifulSoup(selector_string,'lxml').body.next
return soup.find_all(element.name,element.attrs)
print(get_element('<div non_class="first">',soup))
关于python - 如何将一组参数作为一个长变量传递给 find()/find_all(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56115975/
我有一些使用 BeautifulSoup 的 Python 屏幕抓取代码,这让我很头疼。对 html 的一个小改动使我的代码中断,但我不明白为什么它无法工作。这基本上是 html 在解析时的外观演示:
我想找到页面上的所有链接,此代码仅获取以http://开头的链接,但大多数链接都是https:// 我如何编辑下面的代码来找到两者? for link in soup.find_all('a',att
我正在尝试解析一个具有多个同名类的网站。我想采用第一个(如网页上所示)类(class)的元素。但是,find_all 或 find 不保留解析的顺序。下面是我对 find_all 的实现 请帮忙: i
您好,我正在尝试从网站获取一些信息。请原谅我,如果我的格式有任何错误,这是我第一次发布到 SO。 soup.find('div', {"class":"stars"}) 从这里我收到 我需要 “
我希望使用 BeautifulSoup 来解析一些 HMTL。我有一个有几行的表。我正在尝试查找满足某些条件(某些属性值)的行,并稍后在我的代码中使用该行的索引。 问题是:是否find_all()在它
假设我有这个 html 代码: html = """ Text 1 Text 2 """ 使用此代码: from bs4 import BeautifulSoup as bs soup = bs
我想提取 this 中的所有网址网页。 我使用的python代码是这个 htmlfile=urllib.urlopen("http://dubai.dubizzle.com/property-for-
当我抓取一个网页时,我总是遇到一个问题。 AttributeError: ResultSet object has no attribute 'find'. You're probably treat
我在 BeautifulSoup 中发现了一些奇怪的行为,如下面的示例所示。 import re from bs4 import BeautifulSoup html = """This has a
这是我第一次使用 BeautifulSoup,我不知道我做错了什么 Picks Bans Combined 这是我正在使用的 HTM
我有以下 xml, https://mystore.com/products-t-shirt.xml 2019-04-11T00:01:42-04:00 daily
我正在尝试抓取this page所有优惠,并想要迭代 但是page_soup.find_all("p", "white-strip")返回一个空列表 []。 到目前为止我的代码- from urlli
我正在做一些抓取并遇到了问题。 现在我的代码如下所示: pn = soup.find_all("a", {"class": "full"}) pfp = soup.find_all("td", {"c
我正在尝试查找具有 column 类的所有 p 标签。 This is a column More columns heh 我试过: soup.find_all(class_='column') 它返
我是 Python 的新手。我最近的项目是从博彩网站上抓取数据。我要抓取的是网页中的赔率信息。 这是我的代码 from urllib.request import urlopen as uReq fr
我正在使用 beautifulsoup 和 html 解析器执行抓取,并选择了我想要使用的 html 部分并将其保存为“容器”。 from urllib.request import urlopen
主要问题 我知道如何使用 find_all() 检索具有特定值属性的元素,但我找不到任何示例来说明如何检索具有多个可接受值之一的属性的元素。在我的例子中,我正在使用 DITA XML,我想检索范围属性
如何将 bs4 与带有空格的类标签的 find_all 一起使用? container = containers[0] product_container = container.find_all('
我目前正在研究网络爬虫。我希望我的代码从我抓取的所有网址中获取文本。函数 getLinks() 找到我想从中获取数据的链接并将它们放入数组中。该数组目前充满了 12 个链接,如下所示:' http:/
这个问题在这里已经有了答案: python3 print unicode to windows xp console encode cp437 (2 个答案) 关闭 7 年前。 我从 tutoria
我是一名优秀的程序员,十分优秀!