タグのhref属性の下にクロールすべてのウェブサイトのページ

そのような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      、メイン()
コードの表示

 

おすすめ

転載: www.cnblogs.com/riyir/p/12460042.html