python - 如何使用 BeautifulSoup 从网页中抓取结构化表格?
问题描述
我有以下代码来抓取网站(https://www.vesselfinder.com/vessels/STENAWECO-ENERGY-IMO-9683984-MMSI-538005270)。由于类名相似,因此很难确定表类名以将数据抓取到 CSV 文件。我如何确保我正在抓取正确的信息?
我的代码是
agent = {"User-Agent":'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
urlFile = requests.get('https://www.vesselfinder.com/vessels/STENAWECO-ENERGY-IMO-9683984-MMSI-538005270', headers = agent)
soupHtml = BeautifulSoup(urlFile.content, 'lxml')
rowsFind = soupHtml.find_all("table",{"class": "tparams"})
print(rowsFind)
for i in rowsFind:
z = i.find_all("tr")
for r in z:
cols = r.find_all('td' , 'v3')
cols = [x.text.strip() for x in cols]
print(cols)
AISVessel.append(cols[0])
AIStable.append(AISVessel)
现在我有这个错误:
IndexError: list index out of range
所需的输出将是:
[['Tanker' , 'Marshall Islands' , 'USHOU > DOSPM' , 'Jan 3, 19:00' , '9683984 / 538005270' , ' V7CJ5', '183 / 32 m' , '11.4 m' ,' 115.4° / 13.5 kn ' , '19.60436 N/80.84751 W' , 'Jan 1, 2020 07:38 UTC']]
我想将上面反映的相关数据附加到嵌套列表中,以支持将其写入 CSV 文件。
解决方案
要找到正确的表,您可以使用 CSS 选择器h2:contains("AIS Data") ~ table.tparams td.v3
- 这将获取<td>
表中的所有内容,标题为“AIS 数据”:
import requests
from bs4 import BeautifulSoup
agent = {"User-Agent":'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
urlFile = requests.get('https://www.vesselfinder.com/vessels/STENAWECO-ENERGY-IMO-9683984-MMSI-538005270', headers = agent)
soupHtml = BeautifulSoup(urlFile.content, 'lxml')
out = [td.get_text(strip=True) for td in soupHtml.select('h2:contains("AIS Data") ~ table.tparams td.v3')]
print(out)
印刷:
['Tanker', 'Marshall Islands', 'USHOU > DOSPM', 'Jan 3, 19:00', '9683984 / 538005270', 'V7CJ5', '183 / 32 m', '11.4 m', '115.4° / 13.5 kn', '19.60436 N/80.84751 W', 'Jan 1, 2020 07:38 UTC']
推荐阅读
- java - 如何使用适用于 S3 的 AWS Java SDK 查询 AWS S3 存储桶以查找匹配的对象(文件)名称
- javascript - ReactJS:GET http://localhost:8080/contact 404(未找到)
- javascript - 获取 react-router 的当前路由
- javascript - 如何使用 fs.appendSyncFile 写入文件(写入树莓派服务器)
- powershell - 如何在 Powershell 中对 CSV 列进行排序?
- jquery - 错误:SyntaxError:JSON 中的意外标记 <
- python - Django 中 __lte 和 __gte 的区别
- java - 如何在不使用节点的情况下交替合并链表?并使用递归?
- javascript - 有没有办法覆盖 z-index
- apache-kafka - 在 Kafka 中,如何在两个偏移量之间重放 kafka 消费者?