Python web抓取html与xpath语法问题
我是python的新手,我正试图获得公告牌100强排行榜。我知道已经有一个图书馆了,但我正在练习(而且做得不一样)。我的问题是Billboard的歌曲列表与艺术家不匹配,因为选择艺术家的语法在“a”元素和“span”元素之间变化。如何包含这两种类型的元素,这两种元素都包含[@class=“chart-row\uuu-artist”] 目前我有:Python web抓取html与xpath语法问题,python,html,xpath,lxml,Python,Html,Xpath,Lxml,我是python的新手,我正试图获得公告牌100强排行榜。我知道已经有一个图书馆了,但我正在练习(而且做得不一样)。我的问题是Billboard的歌曲列表与艺术家不匹配,因为选择艺术家的语法在“a”元素和“span”元素之间变化。如何包含这两种类型的元素,这两种元素都包含[@class=“chart-row\uuu-artist”] 目前我有: artists = [x.strip() for x in tree.xpath('//a[@class="chart-row__artist"]/te
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()')]
它在页面上交替出现。有什么建议吗?我想我对XPath的语法理解正确。尽管艺术家的元素节点是交替的,但似乎歌曲与艺术家的匹配是适当的。我这样做:
artists = [x.strip() for x in tree.xpath('//*[@class="chart-row__artist"]/text()')]
前缀//*选择了整个文档,然后与类名进行匹配,因此它同时包含了“a”元素和“span”元素。是否需要使用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)
有趣!谢谢你的意见。这似乎更简单。