python-3.x - 如何在 Python 中使用无头模式和 selenium webdriver 节省抓取数据的时间
问题描述
您好,我有一个简单的 python 脚本,可以打开并自动从网页中提取数据。完成它需要 5 秒钟。就我而言,我想要一个更快的脚本,它可以立即运行或最多 2 秒。
这是脚本:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import numpy as np
options = Options()
options.headless = True
options.add_argument("window-size=1400,800")
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--disable-infobars")
options.add_argument("--disable-dev-shm-usage")
url = 'https://www.coteur.com/match/cotes-barcelone-huesca-rid1163090.html'
driver = webdriver.Chrome(options=options)
driver.get(url)
odds = [my_elem.text for my_elem in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.XPATH, '//button[contains(@class, "btn btn-default btn-xs btncote")]')))]
columns = 3
rows = int(len(odds)/columns)
odds = [float(i) for i in odds]
odds = np.array(odds)
odds = odds.reshape(rows, columns)
print(odds, '\n')
driver.close()
driver.quit()
也许您可以帮助改进这个小脚本以节省一些宝贵的时间。谢谢
解决方案
您的执行时间可能取决于几个因素:
- 您正在运行代码的机器
- 您的连接带宽
- 您请求多少数据
话虽如此,我已经使用了您的代码并获得了几秒钟的执行时间2.31
。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import numpy as np
options = Options()
options.headless = True
options.add_argument("window-size=1400,800")
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--disable-infobars")
options.add_argument("--disable-dev-shm-usage")
t0 = time.monotonic()
driver = webdriver.Chrome(options=options)
driver.get('https://www.coteur.com/match/cotes-barcelone-huesca-rid1163090.html')
elements = WebDriverWait(
driver,
2,
).until(
EC.visibility_of_all_elements_located(
(By.XPATH, '//button[contains(@class, "btn btn-default btn-xs btncote")]')
)
)
odds = np.array([float(my_elem.text) for my_elem in elements])
odds = odds.reshape(int(len(odds) / 3), 3)
print(odds)
t1 = time.monotonic()
print(f"{t1-t0:.2f}")
推荐阅读
- python - tf.data 连接包含字典的数据集
- deep-learning - 神经网络甚至不能过拟合一个样本
- python - 为什么仅在 Windows 中编译为 exe 后打开模式“w”而不是“x”触发权限被拒绝错误?
- javascript - 找不到模块:错误:无法解析 nodejs 中的“hiredis”
- javascript - Javascript从另一个数组的索引中获取一个数组
- c - waitpid() 函数返回 ERROR (-1),为什么?
- python - 尝试插入 sqlite 但出现关键错误 - python
- java - android studio中文件的路径格式不正确
- java - 将 javafx 和 dl4j 与 gradle 一起安装时遇到问题
- python-3.x - 将字典列表与一个键值匹配组合