そのようなAの問題がある場合、次のようにhref属性の下にクロールページラベルを書くには、無href属性場合、このエラーは、ラベルの下に発生します。
以下のようにBaiduは、公式ドキュメントをチェックBeautifulSoupは、良い方法を、通常の試合とマスターではなく、どのように良い感じ方法発見しました。
公式文書リンクします。https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
この方法は、存在する場合、タグの性質が、存在するか否かを判断することができるhas_attrは()がtrueを返します
ソリューション:
無名関数の美的使用のために
soup_a = soup.find_all(ラムダタグ:tag.has_attr( 'のhref'))
最終的なコード:
1つの #は/ usr / binに/ ENVのpython! 2 #- * -コーディング:UTF-8 - * - 3 #著者:RIY 4 5 インポート時間 6つの インポート要求 7 インポートSYS 8 インポートログ 9 から BS4の輸入BeautifulSoup 10 からの要求。例外は、インポートRequestException 11 からマルチプロセッシングインポートプロセス、プール 12 13 14 logging.basicConfig( 15 レベル= logging.DEBUG、 16 フォーマット= ' %(levelname)-10s:%(メッセージ)をS ' 、 17 ) 18 19 20 クラスdown_url: 21 デフダウンロード(自己、URL): 22 ''」爬取URL '' ' 23 試し: 24 スタート= time.time() 25 logging.debug(' ダウンロードURLを開始... " ) 26 レスポンス= requests.get(URL) 27 ページ= response.content 28 スープ= BeautifulSoup(ページ、' lxmlの' ) 29 soup_a = soup.find_all(ラムダ:タグtag.has_attr(' のhref ' )) 30 soup_a_href_list = [] 31 #プリント(soup_a) 32 のための K でsoup_a: 33 #プリント(K) 34 soup_a_href = K [ ' のhref ' ] 35 もし soup_a_href.find(' ' ): 36 # プリント(soup_a_href) 37 soup_a_href_list.append(soup_a_href) 38 プリント(F ' 运行了{time.time() -開始}秒' ) 39 を除いEとしてRecursionError: 40 プリント(E) 41 リターンsoup_a_href_list 42 43 44 デフライト( soup_a_href_list、TXT): 45 '' ' 下载到TXT文件''' 46 logging.debug(' ライトTXT ...起動' ) 47 (オープンTXTとを、' '、エンコーディング=' UTF-8 ' )AS F: 48 のための I におけるsoup_a_href_list: 49 f.writelines(F ' {I} \ N- ' ) 50 プリント(F ' 生成TXTファイル} { ' ) 51が 52である 53である DEFのhelp_memo(自己) : 54 '' ' ビューのヘルプ' '' 55 印刷('' ' 56は --help -Hまたはチェック助け で57 -uまたはURLの追加--url 58 -t txtファイルが書き込まれたり--txtさ 59 ' '') 60 61は 62である DEF (セルフ)購入のために利用できる: 63である '' ' ウェルカムページ' '' 64 DESC =(' クロールようこそスクリプトをURL ' .center(30、' * ' )) 65 印刷(DESC) 66 67 68 DEF メイン( ): 69 '' ' メイン関数' '' 70 。P =プール(3 ) 71である P_LIST = [] 72 TEMP = down_url() 73は logging.debug(' パイソン... RUN起動') 74 試す: 75 であれば、LEN(sys.argvの)== 1 : 76 temp.welcome() 77 temp.help_memo() 78 ELIFの sys.argvの[1] に { ' -h '、' --help ' :} 79 TEMP .help_memo() 80 のelif sys.argvの[1] に { ' -u '、' --url ' } と sys.argvの[3] に { ' -t '、'--txt ' }: 81 = temp.download(sys.argvの[2 ]) 82 temp.write(sys.argvの[4 ]) 83 のelif sys.argvの[1] に { ' -t ' ' --txt ' }: 84 プリント(' 请先输入URL!' ) 85 のelif sys.argvの[1] に { ' -u ' ' --url ' }: 86 url_list = sys.argvの[2 :] 87 プリント(url_list) 88 のための I におけるurl_list: 89 = p.apply_async(temp.download、引数= (I)) 90 p_list.append() 91 用のp におけるp_list: 92 プリント(p.get()) 93 他: 94 temp.help_memo() 95 96 印刷(' 输入的参数有误!' ) 97 を除き、Eなど例外: 98 印刷(e)は 99 temp.help_memo() 100 101 102 もし __name__ == ' __main__ ' : 103 、メイン()