gpt4 book ai didi

python - 在 python (lxml) 中抓取嵌套和非结构化表

转载 作者:行者123 更新时间:2023-12-01 00:35:01 25 4
gpt4 key购买 nike

我正在抓取的网站(使用lxml)除了表格之外的所有内容都运行良好,其中所有tr' s 、 td 和标题 th 嵌套并混合,形成一个非结构化 HTML 表格。

<table class='table'>
<tr>
<th>Serial No.
<th>Full Name
<tr>
<td>1
<td rowspan='1'> John
<tr>
<td>2
<td rowspan='1'>Jane Alleman
<tr>
<td>3
<td rowspan='1'>Mukul Jha
.....
.....
.....
</table>

我尝试了以下xpath,但每一个都只是给我返回一个空列表

persons = [x for x in tree.xpath('//table[@class="table"]/tr/th/th/tr/td/td/text()')]

persons = [x for x in tree.xpath('//table[@class="table"]/tr/td/td/text()')]

persons = [x for x in tree.xpath('//table[@class="table"]/tr/th/th/tr/td/td/text()') if x.isdigit() ==False] # to remove the serial no.s

最后,这样嵌套的原因是什么,是为了防止抓取吗?

最佳答案

似乎lxml以与浏览器类似的方式加载表格,并且它在内存中创建正确的结构,并且当您使用lxml.html.tostring(table)时,您可以看到正确的HTML >

因此它具有正确格式的表格,并且需要正常的 './tr/td//text()' 来获取所有值

import requests
import lxml.html

text = requests.get('https://delhimetrorail.info/dwarka-sector-8-delhi-metro-station-to-dwarka-sector-14-delhi-metro-station').text

s = lxml.html.fromstring(text)

table = s.xpath('//table')[1]

for row in table.xpath('./tr'):
cells = row.xpath('./td//text()')
print(cells)

print(lxml.html.tostring(table, pretty_print=True).decode())

结果

['Fare', ' DMRC Rs. 30']
['Time', '0:14']
['First', '6:03']
['Last', '22:24']
['Phone ', '8800793196']

<table class="table">
<tr>
<td title="Monday To Saturday">Fare</td>
<td><div> DMRC Rs. 30</div></td>
</tr>
<tr>
<td>Time</td>
<td>0:14</td>
</tr>
<tr>
<td>First</td>
<td>6:03</td>
</tr>
<tr>
<td>Last</td>
<td>22:24</td>
</tr>
<tr>
<td>Phone </td>
<td><a href="tel:8800793196">8800793196</a></td>
</tr>
</table>

用于比较的原始 HTML - 缺少结束标记

<table class='table'>
<tr><td title='Monday To Saturday'>Fare<td><div> DMRC Rs. 30</div></tr>
<tr><td>Time<td>0:14</tr>
<tr><td>First<td>6:03</tr>
<tr><td>Last<td>22:24
<tr><td>Phone <td><a href='tel:8800793196'>8800793196</a></tr>
</table>

关于python - 在 python (lxml) 中抓取嵌套和非结构化表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57863901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com