2016-08-25 2 views
1

BeautifulSoupを使用してPythonクローラーを作成しようとしていますが、文字列以外の文字バッファータイプをファイルに書き込もうとしているというエラーが発生します。プログラムの出力を調べると、私のリストには何もない項目が多数含まれていることがわかりました。なしを持つことに加えて、私はまた、リンクではなく、私のリストの中にイメージリンクである多くのイメージやものを持っています。 URLを自分のリストに追加するにはどうしたらよいですか?あなたはfind_allとセットを使用し、あなたのエラーが発生しなしを書かないしようとしているので、必ずしもすべてのアンカーのhrefを持っているので、Python - BeautifulSoupを使用したURLリストの作成に関する問題

import urllib 
    from BeautifulSoup import * 

    try: 
     with open('url_file', 'r') as f: 
      url_list = [line.rstrip('\n') for line in f] 
      f.close() 
     with open('old_file', 'r') as x: 
      old_list = [line.rstrip('\n') for line in f] 
      f.close() 
    except: 
     url_list = list() 
     old_list = list() 
     #for Testing 
     url_list.append("http://www.dinamalar.com/") 


    count = 0 


    for item in url_list: 
     try: 
      count = count + 1 
      if count > 5: 
       break 

      html = urllib.urlopen(item).read() 
      soup = BeautifulSoup(html) 
      tags = soup('a') 

      for tag in tags: 

       if tag in old_list: 
        continue 
       else: 
        url_list.append(tag.get('href', None)) 


      old_list.append(item) 
      #for testing 
      print url_list 
     except: 
      continue 

    with open('url_file', 'w') as f: 
     for s in url_list: 
      f.write(s) 
      f.write('\n') 


    with open('old_file', 'w') as f: 
     for s in old_list: 
      f.write(s) 
+0

文字列以外のすべてをフィルタリングしようとしていますか? –

+0

いいえ、私は実際のURLではないすべてをフィルタリングしようとしています。 –

答えて

1

まず第一に、もはや維持BeautifulSoup3bs4を使用していない、あなたの誤差がありますのhref = Trueのので、あなただけのhref属性を持つアンカータグを見つける:

soup = BeautifulSoup(html) 
tags = soup.find_all("a", href=True) 

はまた、文以外は常にキャッチ毛布を使用することはありませんあなたが期待しているエラーが発生したときに少なくともそれらを印刷します。限りまで私はまた多くの画像とリンクではないものがありますあなたが特定のリンクをフィルタリングしたい場合は、より具体的にするか、可能であれば興味があるものを含むタグを探します、正規表現href=re.compile("some_pattern")を使用するか、CSSセレクタを使用します。

# hrefs starting with something 
"a[href^=something]" 

# hrefs that contain something 
"a[href*=something]" 

# hrefs ending with something 
"a[href$=something]" 

は、あなただけでは、HTMLの構造を知っているし、何が欲しいのはそうあなたが使用することを決定するために、完全にあなた次第です。

+0

ありがとう!また、毛布以外の声明が何を意味するのかよくわかりません。それは何もせずに、私が何らかの非特異的な例外をキャッチしているということですか? –

+0

そして、私のコードでCSSセレクターを使用するにはどうしたらいいですか? –

+0

@VishalVenkataraman私が彼が信じているのは、あなたが特定のエラーを除いているはずだということです。非常に一般的な 'Exception'だけでなく、' ImportError'や 'FileNotFoundError'などです。 –

関連する問題