使用Beauty soup的Python web抓取span id

2024-09-26 22:51:08 发布

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

我试图从span id中提取数字数据,但得到的输出是“-”。代码工作时没有错误消息,但不会打印“58990”之类的数字,而是打印“-”。这个网站基本上每24小时更新一个数字,我希望我的代码在每次更新这个数字时都会被删除

page = requests.get("https://covidtracker.fr/vaccintracker/")
soup = BeautifulSoup(page.content,"html.parser")
home = soup.find(class_="page-template page-template-template_vaccintracker page-template-template_vaccintracker-php page page-id-3717")
posts = home.find_all(class_="wrap")



for post in posts:
    title = post.find(id="nb_doses_injectees_24h")
    print(title.text)

website screenshot


Tags: 数据代码idhometitlepagetemplate数字
1条回答
网友
1楼 · 发布于 2024-09-26 22:51:08

首先,最好在所有soup对象中使用标记名。其次,bs4中的class_只能调用class属性。所有其他属性都应作为字典传递

soup.find('<tag_name>', {'<attr_name>': '<attr_value>'})

不幸的是,您正在抓取的网站是动态网站,这意味着您不能通过使用bs4调用静态元素来抓取它。如果查看页面源并查找刮取的标记,您将看到:

<div class="wrap"> <div class="one"> <span id="nb_doses_injectees" style="font-size:200%; margin-top:5px; margin-bottom: 3px;"> </span>&nbsp;&nbsp;(+<span id="nb_doses_injectees_24h"> </span>

这就是您得到结果的原因。您需要切换到selenium以浏览JS-based网站。下面的一个将非常适合您的情况:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager

url = 'https://covidtracker.fr/vaccintracker/'
chrome_driver_path = 'chromedriver'

chrome_options = Options()
chrome_options.add_argument(' headless')

webdriver = webdriver.Chrome(ChromeDriverManager().install())

with webdriver as driver:
    # Set timeout time
    wait = WebDriverWait(driver, 10)

    # Retrieve url in headless browser
    driver.get(url)
    
    data = driver.find_element_by_xpath('//*[@id="nb_doses_injectees_24h"]').text
    # Result is data = "61 643"

    driver.close()

相关问题 更多 >

    热门问题