【问题标题】:How to save time in scraping datas with headless mode and selenium webdriver in Python如何在 Python 中使用无头模式和 selenium webdriver 节省抓取数据的时间
【发布时间】:2021-03-15 15:15:32
【问题描述】:

您好,我有一个简单的 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()

也许您可以帮助改进这个小脚本以节省一些宝贵的时间。 谢谢

【问题讨论】:

  • instantaneously 如果你问我,这听起来像是一个非常紧迫的时间限制。
  • 就算能省2秒就好了
  • 但是为什么呢?以及如何确定脚本的执行时间?
  • 这些数据变化很快。所以我想更快地提取它。
  • 我使用之前的命令时间来运行我的python脚本。你可以在下面看到结果

标签: python-3.x selenium-webdriver web-scraping headless-browser


【解决方案1】:

您的执行时间可能取决于几个因素:

  • 运行代码的机器
  • 您的连接带宽
  • 您请求的数据量

话虽如此,我已经使用了您的代码并得到了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}")

【讨论】:

    【解决方案2】:

    这是执行的输出:

    [[ 1.18  8.25 17.  ]
     [ 1.18  8.25 17.  ]
     [ 1.18  8.1  17.  ]
     [ 1.14  8.   17.  ]
     [ 1.16  8.75 18.  ]
     [ 1.2   7.25 10.  ]
     [ 1.14  7.75 16.  ]
     [ 1.17  8.   16.  ]
     [ 1.16  8.8  19.  ]
     [ 1.16  7.   12.  ]
     [ 1.13  8.5  18.5 ]] 
    
    
    real    0m4,978s
    user    0m1,342s
    sys 0m0,573s
    

    运行它需要 5 秒。我的目标是减少执行时间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      相关资源
      最近更新 更多