xpath获取Python中的元素列表

时间:2018-07-08 19:23:04

标签: python xpath web-scraping

我正在尝试从如下页面中抓取元素列表:

<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循环,我得到每个列表的第一个元素或所有数字作为一个列表。

您能帮我解决这个问题吗? 预先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

addFavourite(card, i) {
  this.cardFavouriteArray.push(card);
  localStorage.setItem('cardFavouriteArray', JSON.stringify(this.cardFavouriteArray))
}
...
ionViewDidLoad() {
  this.favouriteArray = JSON.parse(localStorage.getItem('cardFavouriteArray'));
}

输出:

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 :(得分:0)

您可以使用此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'