python - 使用 Selenium 和 Python 抓取晨星网站。Selenium 不会下载完整的网页
问题描述
这是我的代码:
from selenium import webdriver
import pandas as pd
from lxml import etree
url = 'https://www.morningstar.com/stocks/xbsp/UGPA3/quote'
browser = webdriver.Chrome()
browser.get(url)
htmlpage = browser.page_source
doc = etree.HTML(htmlpage)
cap = doc.xpath(
'/html/body/div[1]/div/div/div[3]/main/div[2]/div/div/div[1]/sal-components/section/div/div/div[1]/div/div[2]/div/div/div/div[2]/ul/li[7]/div/div[2]/text()')
print(cap)
我正在尝试从网页上抓取市值。
在将 htmlpage 变量写入文件后,我发现问题在于它没有下载整个页面。它下载了 2228 KB,而我的浏览器下载了 2664 KB 的 .html 文件和一个不必要的文件夹。如果我用浏览器手动保存页面并将其内容用作 etree.HTML() 的输入,它可以工作,但我想自动化。
解决方案
尝试这个
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time
CHROME_DRIVER_PATH = "/usr/local/bin/chromedriver"
url = 'https://www.morningstar.com/stocks/xbsp/UGPA3/quote'
browser = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH)
browser.get(url)
time.sleep(2)
# get cap value from page source and wait for element is present
cap = WebDriverWait(browser, 10).until(
EC.element_to_be_clickable((By.XPATH,
'//*[@id="__layout"]/div/div[3]/main/div[2]/div/div/div[1]/sal-components/section/div/div/div[1]/div/div[2]/div/div/div/div[2]/ul/li[7]/div/div[2]')))
cap_value = cap.text
print(cap_value)
推荐阅读
- markdown - 带有 bookdown 的 Markdown HTML:更改图形编号
- laravel - 当新项目被放置在 Laravel 应用程序的 composer.json 文件中时会发生什么
- python - 为什么要创建一个方法类型的对象,我想要一个列表类型的对象
- r - 如何将 R 输出保存在不同的目录中?
- symfony - Symfony 4 测试
- html - CSS 位置:绝对不能在 IE11 上正确显示
- python - Altair 图表上方的动态文本
- android - EditText 在 Android Studio 中隐藏屏幕
- javascript - 如何在 HTML 图像上绘制 p5.js 圆圈
- google-cloud-firestore - Google Firestore - 搜索数组中存在的多个项目(和操作)