硒不能阅读网页的所有内容

时间:2018-12-20 14:39:44

标签: python-3.x selenium web-scraping

我是硒的新手。我定义了一个批处理过程,在其中处理几个页面。这些页面都是相等的,但具有不同的数据。因此,我用相同的代码处理所有这些页面。当我开始该过程时,它可以很好地工作,但是,有时,我总是在同一时间点遇到相同的错误。我发现当我尝试从网页中获取数据时,有两个表在流程无法正常工作时无法获取其代码。而且我什么都不懂,因为如果我在先前失败的同一页面中重新启动过程,那么它将正常工作!!!因此,硒似乎并不总是能正确加载网页内容。

我将python 3和selenium与以下代码结合使用:

caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "normal"
#b = WebDriver(executable_path="./chromedriver")
b = webdriver.Chrome(desired_capabilities=caps, executable_path="./chromedriver")
b.set_window_size(300, 300)
b.get(url)
html = b.page_source
self.setSoup(bs4.BeautifulSoup(html,'html.parser'))
b.close()

如何避免始终获得不时产生的错误?

编辑我:

我检查过,当过程正常运行时,这句话向我返回了两个表格:

tables = self.get_soup().findAll("table", class_="competitor-table comparative responsive")

但是,当处理失败时,此代码将返回0个表。我以前怎么说,如果我再次处理以前给我错误的网页,然后可以正常工作,因此,它将返回两个表而不是零。

由于这个原因,我认为硒并不总是向我返回页面的代码,因为对于同一个页面,当它工作不正确时,我将返回零张表,而当它工作正常时,则将我返回两个表格。

编辑II:

例如,现在我在此页面中有一个错误:

http://www.fiba.basketball/euroleaguewomen/18-19/game/1912/Olympiacos-Perfumerias-Avenida#|tab=boxscore

我尝试检索但没有得到的表是这些:

enter image description here

您怎么看,这个CSS类有两个表。我不发布表的内容,因为它们太大了。

这是我尝试获取表内容的代码:

def set_boxscore(self):
    tables = self.get_soup().findAll("table", class_="competitor-table comparative responsive")
    local = False
    print("Total tablas: {}".format(len(tables)))
    for t in tables:
        local = not local
        if local:
            self.home_team.set_stats(t.tfoot.find("tr", class_="team-totals"))
        else:
            self.away_team.set_stats(t.tfoot.find("tr", class_="team-totals"))
        rows = t.tbody.findAll("tr")
        for row in rows:
            time = row.find("td", class_="min").string
            if time.find(MESSAGES.MESSAGE_PLAYER_NOT_PLAY) == -1:
                if local:
                    player = PlayerEuropa(row)
                    self.home_players.append(player)
                else:
                    player = PlayerEuropa(row)
                    self.away_players.append(player)

在这段代码中,我写出了可以在其中找到的总表以及如何看到,现在我有零张表:

enter image description here

现在,如果我重新启动该过程,那么它将对我正常工作。

编辑III:

关于我定义的过程的另一个示例。这些网址已正确处理。

http://www.fiba.basketball/eurocupwomen/18-19/game/2510/VBW-CEKK-Ceglèd-Rutronik-Stars-Keltern#|tab=boxscore
http://www.fiba.basketball/eurocupwomen/18-19/game/2510/Elfic-Fribourg-Tarbes-GB#|tab=boxscore
http://www.fiba.basketball/eurocupwomen/18-19/game/2510/Basket-Landes-BBC-Sint-Katelijne-Waver#|tab=boxscore

但是,当我尝试处理其他网址时,我得到了前面解释的错误:

http://www.fiba.basketball/eurocupwomen/18-19/game/0111/Gorzow-Sparta-k-M-R--Vidnoje#|tab=boxscore

要渲染网页,我使用硒,并且我总是在过程开始时就这样做。我使用以下代码获取网页的内容:

def __init__(self, url):
    """Constructor"""
    caps = DesiredCapabilities().CHROME
    caps["pageLoadStrategy"] = "normal"
    #b = WebDriver(executable_path="./chromedriver")
    b = webdriver.Chrome(desired_capabilities=caps, executable_path="./chromedriver")
    b.set_window_size(300, 300)
    b.get(url)
    html = b.page_source
    self.setSoup(bs4.BeautifulSoup(html,'html.parser'))
    b.close()

此代码之后,是我开始检索网页信息的时间。出于某种原因,有时网页无法完全呈现,因为当我尝试获取某些信息时,找不到该信息并得到前面解释的错误。

0 个答案:

没有答案