0

我已經編寫了代碼塊,用於在網頁中搜索一些隨機文本。該網頁有多個標籤,我正在使用硒進行導航。以下是我嘗試查找的文本在特定頁面中未固定的問題。文字可以位於網頁的任何標籤中。如果未找到文本,則會引發異常。如果引發異常,它應該轉到下一個標籤進行搜索。我在處理例外時遇到困難。漂亮的肥皂/ Python中的異常處理

以下是我正在嘗試的代碼。

import requests 
from bs4 import BeautifulSoup 
import re 
from selenium import webdriver 
driver = webdriver.Firefox() 
driver.get("https://www.yxx.com/71463001") 
a = driver.page_source 
soup = BeautifulSoup(a, "html.parser") 

try: 
    head = soup.find_all("div", {"style":"overflow:hidden;max-height:25px"}) 
    head_str = str(head) 
    z = re.search('B00.{7}', head_str).group(0) 
    print z 
    print 'header' 
except AttributeError: 
    g_info = soup.find_all("div", {"id":"details_readonly"}) 
    g_info1=str(g_info) 
    x = re.search('B00.{7}', g_info1).group(0) 
    print x 
    print 'description' 
except AttributeError: 
    corre = driver.find_element_by_id("tab_correspondence") 
    corre.click() 
    corr_g_info = soup.find_all("table", {"id" : "correspondence_view"}) 
    corr_g_info1=str(corr_g_info) 
    print corr_g_info 
    y = re.search('B00.{7}', corr_g_info1).group(0) 
    print y 
    print 'correspondance' 

當我運行這段代碼我得到一個

error Traceback (most recent call last): 
    File "C:\Python27\BS.py", line 21, in <module> 
    x = re.search('B00.{7}', g_info1).group(0) 
AttributeError: 'NoneType' object has no attribute 'group' 

回答

-1

,因爲你是一個re.search對象不包含任何關於調用組你得到錯誤。當我運行你的代碼時,它失敗了,因爲你試圖連接的頁面當前沒有啓動。

至於爲什麼你的except沒有趕上它:你錯誤地寫了兩個except s只有一個trytry只會在第except之前捕獲任何AttributeError s代碼

通過將第19行更改爲x = re.search('B00.{7}', g_info1),代碼將運行並返回Nonedescription--同樣,因爲該頁面當前未啓動。

此外,要達到什麼樣的我想你會的,嵌套try/except是一個選項:

try: 
    head = soup.find_all("div", {"style":"overflow:hidden;max-height:25px"}) 
    head_str = str(head) 
    z = re.search('B00.{7}', head_str).group(0) 
    print z 
    print 'header' 
except AttributeError: 
    try: 
     g_info = soup.find_all("div", {"id":"details_readonly"}) 
     g_info1=str(g_info) 
     x = re.search('B00.{7}', g_info1) 
     print x 
     print 'description' 
    except AttributeError: 
     corre = driver.find_element_by_id("tab_correspondence") 
     corre.click() 
     corr_g_info = soup.find_all("table", {"id" : "correspondence_view"}) 
     corr_g_info1=str(corr_g_info) 
     print corr_g_info 
     y = re.search('B00.{7}', corr_g_info1).group(0) 
     print y 
     print 'correspondance' 

當然,這個代碼目前拋出一個NameError因爲在網站上沒有資料從中定義corr_g_info變量。

+0

謝謝你的作品。添加一個嵌套的try catch工程。 –