首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取包含多行的长属性值

提取包含多行的长属性值
EN

Stack Overflow用户
提问于 2020-06-18 12:24:31
回答 1查看 28关注 0票数 1

我想从一个网站的工具提示刮文本。它的HTML码作为属性oldtitle的值嵌入。我尝试了css和xpath选择器--例如//span[@class="spanTip underLine"]/@oldtitle --但是没有成功。是不是因为属性值被分成多行?有没有办法使用选择器来做到这一点?

代码语言:javascript
复制
<tr><td>
<span class="spanTip underLine" style="cursor:default;" data-hasqtip="true" oldtitle="<table class='qtipTable'>
<tbody>
<tr>
<td><span class='label'>A:</span>1</td>
<td><span class='label'>B:</span>2</td>
</tr>
<tr>
<td><span class='label'>C:</span>3</td>
<td><span class='label'>D:</span>4</td>
</tr>
<tr>
<td><span class='label'>E:</span></td>

</tr>
<tr>
<td><span class='label'>F:</span>5</td>
<td><span class='label'>G:</span>6</td>
</tr>
</tbody>
</table>" title="" aria-describedby="qtip-5">Item with Tooltip</span>
</td>
</tr>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-18 15:45:51

这是一个使用Python的BeautifulSoup的解决方案。在参数oldtitle=中获取超文本标记语言

代码语言:javascript
复制
txt = '''<tr><td>
<span class="spanTip underLine" style="cursor:default;" data-hasqtip="true" oldtitle="<table class='qtipTable'>
<tbody>
<tr>
<td><span class='label'>A:</span>1</td>
<td><span class='label'>B:</span>2</td>
</tr>
<tr>
<td><span class='label'>C:</span>3</td>
<td><span class='label'>D:</span>4</td>
</tr>
<tr>
<td><span class='label'>E:</span></td>

</tr>
<tr>
<td><span class='label'>F:</span>5</td>
<td><span class='label'>G:</span>6</td>
</tr>
</tbody>
</table>" title="" aria-describedby="qtip-5">Item with Tooltip</span>
</td>
</tr>'''

soup = BeautifulSoup(txt, 'html.parser')

inner_soup = BeautifulSoup( soup.select_one('span.spanTip[oldtitle]')['oldtitle'], 'html.parser' )

print(inner_soup)

打印:

代码语言:javascript
复制
<table class="qtipTable">
<tbody>
<tr>
<td><span class="label">A:</span>1</td>
<td><span class="label">B:</span>2</td>
</tr>
<tr>
<td><span class="label">C:</span>3</td>
<td><span class="label">D:</span>4</td>
</tr>
<tr>
<td><span class="label">E:</span></td>
</tr>
<tr>
<td><span class="label">F:</span>5</td>
<td><span class="label">G:</span>6</td>
</tr>
</tbody>
</table>

然后,您可以正常使用inner_soup,例如:

代码语言:javascript
复制
for tr in inner_soup.select('table tr'):
    print([td.get_text(strip=True) for td in tr.select('td')])

打印:

代码语言:javascript
复制
['A:1', 'B:2']
['C:3', 'D:4']
['E:']
['F:5', 'G:6']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62442373

复制
相关文章

相似问题

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