как получить имя класса span, используя xpath - PullRequest
0 голосов
/ 23 июня 2019

Я пытался получить class имя первого span класса header.В этом случае я хотел бы напечатать «all-star 40 main-title-rating».

Я успешно распечатал имя пользователя, в данном случае «lemon».Но я не знал, как получить доступ к названию класса и получить оценку.

Спасибо!

<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)
}

Нет ошибки, но ничего не напечатано для оценки.

Спасибо ~

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

Я бы предпочел селекторы CSS и использовать просто извлечь класс

ratings = [(item.select_one('.name').text, ' '.join(item.select_one('.main-title-rating')['class'])) for item in soup.select('.review-item')]

Вы можете использовать split или re, чтобы извлечь фактическое количество звезд:

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 голосов
/ 23 июня 2019

Вы можете просто добавить @class к xpath:

rate = comment.xpath('//header/span[1]/@class')
print(rate)

См. этот пример .

Надеюсь, это поможет вам!

...