Python Beautiful Soup未返回html表的列表
我正在尝试从下一页的表中提取描述、日期和url: 为了使我的代码与其他20个url保持一致,我需要有下面的逻辑,即整个主体的findall,然后通过循环找到适用的数据 问题是表体为空Python Beautiful Soup未返回html表的列表,python,python-3.x,beautifulsoup,Python,Python 3.x,Beautifulsoup,我正在尝试从下一页的表中提取描述、日期和url: 为了使我的代码与其他20个url保持一致,我需要有下面的逻辑,即整个主体的findall,然后通过循环找到适用的数据 问题是表体为空 import requests from bs4 import BeautifulSoup r = requests.get("https://www.fda.gov/safety/recalls-market-withdrawals-safety-alerts") c = r.content soup =
import requests
from bs4 import BeautifulSoup
r = requests.get("https://www.fda.gov/safety/recalls-market-withdrawals-safety-alerts")
c = r.content
soup = BeautifulSoup(c,"html.parser")
all = soup.find_all("tbody") #whole table text THIS IS WHERE THE PROBLEM ORIGINATES
for item in all:
print(item.find_all("tr").text) #test for tr text i.e. product description
print(item.find("a")["href"]) #url
print(item.find_all("td")[0].text) #date (won't work but can't test until tbody returns data
我做错了什么
提前谢谢 使用javascript从另一个页面动态加载该页面中的表。然后加载到熊猫数据帧中,完成以下操作:
import requests
import pandas as pd
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'en-US,en;q=0.5',
'X-Requested-With': 'XMLHttpRequest',
'Connection': 'keep-alive',
'Referer': 'https://www.fda.gov/safety/recalls-market-withdrawals-safety-alerts',
'TE': 'Trailers',
}
params = (
('_', '1589124541273'),
)
response = requests.get('https://www.fda.gov/files/api/datatables/static/recalls-market-withdrawals.json', headers=headers, params=params)
response
df = pd.read_json(response.text)
然后,使用标准方法可以从表中提取目标信息
另一个选项,在本例中,您可以使用Firefox-Developer Tools-Network嗅探web响应。 您将发现JSON url更干净,更容易解析
在您提供的链接上没有
tbody
属性,只有body
。我建议您尝试使用body
而不是tbody
?我相信就在div class=“col-sm-12”下面我将soup
转储到文本文件中,使用Ctrl-F我没有找到任何tbody
referencei我认为你不会通过BeautifulSoup获得任何数据-数据似乎在数据表中-我假设这是一个javascript组件(不确定)。如果您确实选中了network选项卡,您将看到底层数据是一个json文件。你可以很容易地从那里提取你的数据@sammywemmy你是对的。我使用了下面杰克的解决方案。谢谢,这会有用的。我认为我的列表中有几个站点与此类似,因此我必须为类似的情况创建一个函数。