首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用xpath获取span的类名

如何使用xpath获取span的类名
EN

Stack Overflow用户
提问于 2019-06-23 13:49:14
回答 2查看 180关注 0票数 0

我正在尝试获取header类的第一个spanclass名称。在这种情况下,我想打印出“全明星40主标题-评级”。

我成功地打印出了用户名,在本例中为"lemon“。但我不知道如何访问类名并获得评级。

谢谢!

代码语言:javascript
运行
复制
<header class="main-hd">
    <a href="https://www.douban.com/people/lime/" class="avator">
        <img width="24" height="24" src="https://img3.doubanio.com/icon/u1023412-1.jpg">
    </a>
    <a href="https://www.douban.com/people/lime/" class="name">lemon</a>
        <span class="allstar40 main-title-rating" title="推荐"></span>
    <span content="2005-09-26" class="main-meta">2005-09-26 17:20:32</span>
</header>

headers={"User-Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"}
url="https://movie.douban.com/subject/1291561/?from=showing"
data=requests.get(url,headers=headers)
from lxml import etree
selector=etree.HTML(data.text)
comments = selector.xpath('//div[@class="main review-item"]')
for comment in comments{
    user = comment.xpath('.//header/a/text()')
    print(user)
    rate = comment.xpath('.//header/span[1]/element')
    print(rate)
}

没有错误,但没有为评级打印任何内容。

谢谢~

EN

回答 2

Stack Overflow用户

发布于 2019-06-23 16:42:24

您可以只将@class添加到xpath:

代码语言:javascript
运行
复制
rate = comment.xpath('//header/span[1]/@class')
print(rate)

参见this example

希望这对你有帮助!

票数 0
EN

Stack Overflow用户

发布于 2019-06-23 20:49:09

我更喜欢css选择器,并使用刚刚提取的类

代码语言:javascript
运行
复制
ratings = [(item.select_one('.name').text, ' '.join(item.select_one('.main-title-rating')['class'])) for item in soup.select('.review-item')]

您可以使用split或re来提取实际的星数:

代码语言:javascript
运行
复制
from bs4 import BeautifulSoup as bs
import requests
import re

r = requests.get('https://movie.douban.com/subject/1291561/?from=showing')
soup = bs(r.content, 'lxml')
ratings = [(item.select_one('.name').text, re.search(r'(\d)',item.select_one('.main-title-rating')['class'][0]).groups(0)[0] ) for item in soup.select('.review-item')]
print(ratings)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56721379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档