XPath如何获取Python中的元素列表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (332)

我试图从如下页面中抓取元素列表:

<div class="container">
    <b>1</b>
    <b>2</b>
    <b>3</b>
</div>
<div class="container">
    <b>4</b>
    <b>5</b>
    <b>6</b>
</div>

我希望使用XPath获得列表或元组:1,2,3,4,5,6..

使用页面上的for循环,我可以得到每个列表的第一个元素或所有数字作为一个列表。

你能帮我解决这个问题吗?

提问于
用户回答回答于

对于静态页面的网页抓取,bs4是最好的包。使用bs4,可以轻松实现以下目标:

from bs4 import BeautifulSoup
source = """<div class="container">
    <b>1</b>
    <b>2</b>
    <b>3</b>
</div>
<div class="container">
    <b>4</b>
    <b>5</b>
    <b>6</b>
</div>"""
soup = BeautifulSoup(source, 'html.parser')  # parse content/ page source
soup.find_all('div', {'class': 'container'})  # find all the div element (second argument is optional mentioned to scrape/find only element with attribute value)
print([[int(x.text) for x in i.find_all('b')] for i in soup.find_all('div', {'class': 'container'})])  # get list of all div's number list as you require

输出:

[[1, 2, 3], [4, 5, 6]]
用户回答回答于

你可以使用这个XPath表达式,它将为你提供两个字符串

.//*[@class='container']    ➡ '1 2 3', '4 5 6'

如果你想要6个字符串

.//*[@class='container']/b  ➡ '1','2','3','4','5','6'

要准确地获得所要查找的内容,必须将XPath表达式分隔开来。

.//*[@class='container'][1]/b  ➡ '1','2','3'
.//*[@class='container'][2]/b  ➡ '4','5','6'

扫码关注云+社区

领取腾讯云代金券