当前位置: 首页 > 知识库问答 >
问题:

web抓取webdriver异常时出错

阳兴文
2023-03-14
!pip install selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
from datetime import datetime
import pandas as pd
errors = []
season = []

for id in range(46605, 46985):
my_url = f'https://www.premierleague.com/match/{id}'
option = Options()
#option.headless = True
driver = webdriver.Chrome(options=option)
driver.get(my_url)

代码在这里运行正常。

date = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="mainContent"]/div/section/div[2]/section/div[1]/div/div[1]/div[1]'))).text
date = datetime.strptime(date, '%a %d %b %Y').strftime('%m/%d/%Y')
home_team = driver.find_element_by_xpath('//*[@id="mainContent"]/div/section/div[2]/section/div[3]/div/div/div[1]/div[1]/a[2]/span[1]').text
away_team = driver.find_element_by_xpath('//*[@id="mainContent"]/div/section/div[2]/section/div[3]/div/div/div[1]/div[3]/a[2]/span[1]').text

执行这些行时弹出错误。错误截图1

错误截图2

共有2个答案

宋高谊
2023-03-14

@Kaustav在回答时说,这是一个代码块,不知道如何把它放在评论部分。虽然我赞同@Joe的想法,但因为你想要一个精确的语法,我想我可以把一段代码放在一起展示给你。因此,这里的代码打开浏览器,获取详细信息(当您输入代码时),然后将其存储在列表中(用于显示此任务,但实际上可能不是必需的,这取决于您的要求)。

我要再次重申,打开、使用和关闭浏览器(即使是无头浏览器)进行如此多次的迭代,可能会在循环中的某个时间点影响性能,所有的时间都会被浪费。我强烈建议你找到本网站的API(如果有的话),并使用它成功。

话虽如此,下面是供您使用的代码。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from time import sleep
from datetime import datetime
import pandas as p
import time
errors = []
season = []

url_ls=[] # used to show to query creator a demo
for id in range(46605, 46985):
    my_url = f'https://www.premierleague.com/match/{id}'
    option = Options()
    option.add_argument('--headless')
    option.add_argument('--disable-gpu')
    driver = webdriver.Chrome(options=option)
    driver.get(my_url)
    title = driver.current_url
    try:
        WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[text()='Accept All Cookies']"))).click()
    except:
        print("cookie modal not found")
        continue
    # time.sleep(10)
    match_date = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='matchInfo']//div[contains(@class, 'matchDate')]"))).text
    match_date_f = datetime.strptime(match_date, '%a %d %b %Y').strftime('%m/%d/%Y')
    home_team = driver.find_element(By.XPATH, "//div[@class='team home']").text
    away_team = driver.find_element(By.XPATH, "//div[@class='team away']").text
    tup = (title + "|" + match_date + "|" + home_team + "|" + away_team)
    url_ls.append(tup)
    driver.close()
print(url_ls)  # used to show to query creator a demo

这是输出(我只是附加了当前的url,以及这个代码中元素的文本,但是你可以进一步扩展这个块并添加你的元素——你可以像导入熊猫一样,将数据发送到数据框,然后发送到excel或csv——随你喜欢)

['https://www.premierleague.com/match/46605|Sat 10 Aug 2019|Liverpool|Norwich City', 'https://www.premierleague.com/match/46606|Sat 10 Aug 2019|AFC Bournemouth|Sheffield United', 'https://www.premierleague.com/match/46607|Sat 10 Aug 2019|Burnley|Southampton', 'https://www.premierleague.com/match/46608|Sat 10 Aug 2019|Crystal Palace|Everton', 'https://www.premierleague.com/match/46609|Sun 11 Aug 2019|Leicester City|Wolverhampton Wanderers']

Process finished with exit code 0
司承业
2023-03-14

为什么不使用英超联赛网站使用的api?

import requests

fixture = 66553

headers =   {
    'accept':'*/*',
    'accept-encoding':"gzip;q=1.0, identity; q=0.5",
    'accept-language':'en-ZA,en;q=0.9,en-GB;q=0.8,en-US;q=0.7,de;q=0.6',
    'content-type':'application/x-www-form-urlencoded; charset=UTF-8',
    'origin':'https://www.premierleague.com',
    'referer':'https://www.premierleague.com/',
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
    }

url = f'https://footballapi.pulselive.com/football/broadcasting-schedule/fixtures/{fixture}'
data = requests.get(url,headers=headers).json()

print(data['fixture']['attendance'])
print(data['fixture']['kickoff']['label'])
print(data['fixture']['teams'])

url = f'https://footballapi.pulselive.com/football/fixtures/{fixture}/textstream/EN?pageSize=1000&sort=desc'
data = requests.get(url,headers=headers).json()

for message in data['events']['content']:
    print(message['text'])
 类似资料:
  • 什么是抓取异常  Baiduspider无法正常抓取,就是抓取异常。 抓取异常对网站有哪些影响  对于大量内容无法正常抓取的网站,搜索引擎会认为网站存在用户体验上的缺陷,并降低对网站的评价,在抓取、索引、权重上都会受到一定程度的负面影响,最终影响到网站从百度获取的流量。 抓取异常的原因有哪些 一、网站异常 1、dns异常   当Baiduspider无法解析您网站的IP时,会出现DNS异常。可能是

  • 初始化类时,我的实现代码如下。执行以下操作时发生错误。 请帮助初始化具有用户代理的 Web 驱动程序。我希望我能避免机器人自然刮擦。使用: “Mozilla/5.0 (视窗 NT 6.1;赢64;x64;rv:47.0) 壁虎/20100101火狐/47.0“ 作为代理

  • 问题内容: 我正在寻找一种方法,可以根据用户在PHP中提供的URL对另一个页面进行小的预览。 我只想检索页面标题,图像(如网站徽标)以及一些文字或说明(如果有)。有没有任何外部库/类的简单方法?谢谢 到目前为止,我已经尝试过使用DOCDocument类,加载HTML并将其显示在屏幕上,但是我认为这不是正确的方法 问题答案: 我建议您考虑为此使用simple_html_dom。这将使其非常容易。 这

  • 大家好,我正在使用selenium webdriver,在运行下面的脚本时,我在脚本中突出显示的位置遇到了陈旧元素异常错误。 我的脚本停在那里,我不能运行。 错误消息为-Stale元素异常错误。在缓存中找不到该元素,可能是页面在查找后发生了更改。 在这种情况下,请任何人帮助我,并指导我纠正这个错误。 你好Vignesh K S

  • 直到昨天:以下代码工作正常。 但是今天早上它开始抛出:异常线程"main"org.openqa.selenium.SessionNotCreatedException:会话未创建异常 我在Stackoverflow中阅读了几个答案。我知道如果selenium web驱动程序和chrome驱动程序之间存在版本不匹配,就会引发此错误。所以我下载了最新的Selenium Web驱动程序(3.0.1 fo

  • 问题内容: 我正在做一个项目,我需要做很多屏幕抓取工作,以尽可能快地获取大量数据。我想知道是否有人知道任何好的API或资源来帮助我。 顺便说一下,我正在使用Java。 到目前为止,这是我的工作流程: 连接到网站(使用来自Apache的HTTPComponents) 网站包含一个带有一堆我需要访问的链接的部分(使用内置的Java HTML解析器来弄清楚我需要访问的所有链接是什么,这很烦人且凌乱的代码