首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于在Python中获取元素列表的xpath

用于在Python中获取元素列表的xpath
EN

Stack Overflow用户
提问于 2018-07-09 03:23:04
回答 2查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
<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循环,我可以获得每个列表的第一个元素,也可以将所有数字作为一个列表。

你能帮我解决这个习题吗?提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-09 03:29:36

对于静态页面的web抓取,bs4是最好使用的软件包。使用bs4 ,你可以很容易地实现你的目标,如下所示:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
[[1, 2, 3], [4, 5, 6]]
票数 0
EN

Stack Overflow用户

发布于 2018-07-09 04:22:34

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

代码语言:javascript
复制
.//*[@class='container']    ➡ '1 2 3', '4 5 6'

如果您希望使用6个字符串

代码语言:javascript
复制
.//*[@class='container']/b  ➡ '1','2','3','4','5','6'

但是,要获得所需的内容,必须将xpath表达式分开

代码语言:javascript
复制
.//*[@class='container'][1]/b  ➡ '1','2','3'
.//*[@class='container'][2]/b  ➡ '4','5','6'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51235304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档