[英]Beautiful Soup not returning a list for html table
我正在嘗試從下一頁的表格中提取描述、日期和 url:
https://www.fda.gov/safety/recalls-market-withdrawals-safety-alerts
為了使我的代碼與其他 20 個 url 保持一致,我需要具有以下邏輯,即 findall 的整個正文,然后遍歷它以查找適用的數據。
問題是表體是null。
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 從另一個頁面動態加載的。 使用瀏覽器中的開發人員工具,您可以復制該請求並將其用於您的代碼。 然后加載到 pandas dataframe 中,就完成了:
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)
然后使用標准 pandas 方法,您可以從表中提取目標信息。
在這種特殊情況下,另一種選擇是嘗試使用 FDA 的 API。
您可以使用 Firefox - 開發人員工具 - 網絡來嗅探 web 響應。 您會發現 JSON url 會更干凈且易於解析。
https://www.fda.gov/files/api/datatables/static/recalls-market-withdrawals.json?_=1589125108944
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.