簡體   English   中英

Beautiful Soup 沒有返回 html 表的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM