如何使用 css 选择器从特定类中查找所有下一个兄弟姐妹

Posted

技术标签:

【中文标题】如何使用 css 选择器从特定类中查找所有下一个兄弟姐妹【英文标题】:How to find all next siblings from a particular class using css selectors 【发布时间】:2016-03-21 03:24:57 【问题描述】:

我想抓取这个网站Hotel Association Data 并需要有关 css 选择器的帮助。如果您看到下图,我正在尝试使用 css 选择器从此处提取地址。

我要抓取的数据:20 West 29th StreetNew York, NY 10001

使用下一个兄弟方法

我知道我们可以使用+ 符号找到下一个兄弟,但这里的问题是地址文本都没有与之关联的任何attribute。我不想在这里使用xpath,而是使用通用css选择器来查找.hanyccompany的所有兄弟姐妹,然后从中提取文本。

谁能告诉我如何找到class='hanyccompany的所有兄弟姐妹

<span class="hanyccompany"><a href="http://www.acehotel.com/" target="_blank">ACE HOTEL NEW YORK</a></span><br />
20 West 29th Street<br />
New York, NY 10001<br />

【问题讨论】:

【参考方案1】:

您可以使用 BeautifulSoup 轻松解析和提取数据。

from bs4 import BeautifulSoup
from mechanize import Browser

br = Browser()
br.addheaders = [('User-agent', 'Firefox')]
response = br.open("http://www.hanyc.org/members/hotels/")

web_data = response.read()

soup = BeautifulSoup(web_data, "html.parser")
tags = soup.find_all('span', attrs="class": "hanyccompany")

for tag in tags:
    print(tag.parent.text)
    print("------------------------------")

如果你打印 span 父级的文本,你会得到类似的东西

ACE HOTEL NEW YORK
20 West 29th Street
New York, NY 10001
Jan Rozenveld, Managing Director
(212) 679-2222
(212) 679-1947
jan.rozenveld@acehotel.com

...

【讨论】:

我想提取address 而不是class=hanyccompany 或者我想提取class=hanyccompany 的所有兄弟姐妹 查看更新后的帖子。您可以遍历标签列表并获取父标签。 tag.parent.text 只会给你没有所有标签的内部文本。 web_data 不是网址。你有责任用你想要的任何方法读取 url 和提取 html 内容。 web_data 包含最终的 html 不,它不起作用。我的web_data 包含所有 html 内容,但我看不到任何输出。

以上是关于如何使用 css 选择器从特定类中查找所有下一个兄弟姐妹的主要内容,如果未能解决你的问题,请参考以下文章

CSS选择器从右向左的匹配规则

如何使用 CSS 选择器使用 BeautifulSoup 检索位于某个类中的特定链接?

使用手势识别器中的选择器从 GameScene 调用另一个类中的 SpriteKit 函数

如何使用两个日期选择器从我的数据库中获取数据。代码点火器

使用 css 选择器 excel vba 从网站抓取数据

使用css选择器从元素中获取文本,不包括嵌套元素内的文本