0

私は、Webページのいくつかのランダムなテキストを検索するコードブロックを作成しました。このウェブページには複数のタブがあり、セレンを使ってナビゲートしています。ここで私が探しているテキストが特定のページで修正されていないという問題があります。テキストは、Webページの任意のタブに置くことができます。テキストが見つからない場合は例外が発生します。例外が発生した場合は、次のタブに移動して検索する必要があります。私は例外を扱う際の困難に直面している。美しい石鹸/ 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' 

私はこのコードを実行すると、私はあなたが何も含まれていませんre.searchオブジェクトのグループを呼び出しているので、あなたがそのエラーを取得している

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

を取得します。あなたのコードを実行すると、接続しようとしているページが現在起動していないので、それは失敗します。

あなたのexceptがそれをキャッチしていない限り、間違っての2つしか書いていません。 tryは、コードの場合はAttributeErrorで、の場合は最初のexceptの前にのみキャッチします。

行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を追加すると動作します。 –