【发布时间】:2021-12-08 16:17:56
【问题描述】:
我在尝试使用 BeautifulSoup 进行一些 Python 网页抓取时遇到了很多问题。由于这个特定的网页是动态的,我一直在尝试先使用 Selenium 来“打开”网页,然后再尝试使用 BeautifulSoup 处理动态内容。
我遇到的问题是,动态内容仅在我在运行程序时手动滚动浏览网站时才会显示在我的 HTML 输出中,否则这些部分HTML 的一部分保持为空,就好像我只是在没有 Selenium 的情况下单独使用 BeautifulSoup。
这是我的代码:
import time
from bs4 import BeautifulSoup
from selenium import webdriver
if __name__ == "__main__":
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
# options.add_argument('--headless')
driver = webdriver.Chrome("C:\Program Files (x86)\chromedriver.exe", chrome_options=options)
driver.get('https://coinmarketcap.com/')
time.sleep(5)
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
tbody = soup.tbody
trs = tbody.contents
for tr in trs:
print(tr)
driver.close()
现在,如果我在打开无头选项的情况下使用 Selenium 打开 Chrome,我将获得与通常在没有预加载页面的情况下获得的相同的输出。如果我不在无头模式下,也会发生同样的事情,我只是让页面自行加载,而不需要手动滚动内容。 有人知道为什么吗?有没有办法让动态内容加载而无需每次运行代码时手动滚动?
【问题讨论】:
标签: python selenium beautifulsoup