BeautifulSoup,lmxl 未下载时间文本

BeautifulSoup, lmxl not downloading time text

我正在尝试从网站下载数据,一切正常,除了遇到日期时,它只会 return“”。我查看了下载到程序中的 html,它在标签之间没有任何内容,这就是为什么它 return 什么也没有。当您在线检查 html 时,您可以清楚地看到它。有人有什么想法吗?

from bs4 import BeautifulSoup
import requests

stocks=["3PL"]

keys = list()
values = list()

for stock in stocks:
    source = requests.get(r"https://www.reuters.com/companies/" + stock + ".AX/key-metrics").text
    soup = BeautifulSoup(source, 'lxml')
    for data in soup.find_all("tr", class_="data"):
        keys.append(data.th.text)
        if data.td.text != "--":
            values.append(data.td.text)
        else:
            values.append("nan")

print(keys[3])
print(values[3])                    #This should return the date

您的数据似乎添加了 javascript。这是 requests 不会处理的事情,因为它不会像普通浏览器那样呈现页面。只获取原始数据。

但是,您可以使用 selenium 包来成功完成此操作。要安装这个:

pip install selenium

您可能需要设置一些网络驱动程序才能使用 Firefox,或者 Chrome。但在下面的案例中,我使用的是开箱即​​用的浏览器,即 Safari。

我已经稍微调整了你的代码以使用 selenium 包,并将你的数据放入字典中以保持更好的一致性。

from bs4 import BeautifulSoup
from selenium import webdriver
import requests

stocks=["3PL"]

response_data = {}
driver = webdriver.Safari()

for stock in stocks:
    url = r"https://www.reuters.com/companies/" + stock + ".AX/key-metrics"
    driver.get(url)
    source = driver.page_source
    soup = BeautifulSoup(source)
    for data in soup.find_all("tr", class_="data"):
        if data.td.text != "--":
            response_data[data.th.text] = data.td.text
        else:
            response_data[data.th.text] = 'nan'

driver.close()

现在您可以检查数据是否正确下载:

print(response_data['Pricing date'])
Sep-04