Python web抓取html与xpath语法问题

时间:2018-06-03 20:40:21

标签: python html xpath lxml

我是python的新手并试图将广告牌列为热门列表。我知道已经有一个图书馆,但我正在练习(而且它的完成方式不同)。我的问题是Billboard的歌曲列表与艺术家不匹配,因为选择艺术家的语法在“a”元素和“span”元素之间变化。如何包含两种都包含[@ class =“chart-row__artist”]的元素。

目前我有:

artists = [x.strip() for x in tree.xpath('//a[@class="chart-row__artist"]/text()')]

但这也会带来跨度的歌曲:

artists = [x.strip() for x in tree.xpath('//span[@class="chart-row__artist"]/text()')]

它在页面上交替显示。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我认为我的XPath语法正确。尽管艺术家有交替的元素节点,但这些歌曲似乎与艺术家恰当匹配。我这样做了:

artists = [x.strip() for x in tree.xpath('//*[@class="chart-row__artist"]/text()')]

前缀// *选择整个文档然后与类名匹配,因此这涵盖了' a'元素和' span'元件。

答案 1 :(得分:0)

是否需要使用xpath?我很容易得到所有bs4艺术家的名单。

import requests
from bs4 import BeautifulSoup

response = requests.get('https://www.billboard.com/charts/hot-100')
soup = BeautifulSoup(response.content, 'lxml')
artists = [row.text.strip() for row in soup.select('.chart-row__artist')]
print(artists)