查找表返回带有bs4的[]

2024-06-01 08:39:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从这个url中删除一个表:https://cryptoli.st/lists/fixed-supply 我推测我想要的表在div类“dataTables\u scroll”中。我使用以下代码,它只返回一个空列表:

from bs4 import BeautifulSoup as bs import requests import pandas as pd url = requests.get("https://cryptoli.st/lists/fixed-supply") soup = bs(url.content, 'lxml') table = soup.find_all("div", {"class": "dataTables_scroll"}) print(table)

任何帮助都将不胜感激

谢谢


Tags: httpsimportdivurlbsasrequestslists
2条回答

我相信数据是从脚本标签加载的。我必须开始工作,因此目前无法花更多时间研究如何从“|”分隔的数据中适当地重新创建数据帧,但以下内容可能会作为其他内容的起点,因为它会从表体的脚本标记中提取相关项

import requests, re
import ast

r = requests.get('https://cryptoli.st/lists/fixed-supply').text
s = re.search(r'cl\.coinmainlist\.dataraw = (\[.*?\]);', r, flags = re.S).group(1)
data = ast.literal_eval(s)
data = [i.split('|') for i in data]
print(data)

原因是从requests.get()得到的响应中不包含表数据

它可以在客户端加载(通过javascript)

对此你能做些什么?使用selenium webdriver是一种可能的解决方案。您可以“等待”直到加载表并使其成为交互式的,然后使用selenium获取页面内容,将上下文传递给bs4进行抓取

您可以通过将响应写入文件来检查响应:

f = open("demofile.html", "w", encoding='utf-8')
f.write(soup.prettify())
f.close()

您将能够看到“…加载…”表格的预期位置

相关问题 更多 >