2016-08-25 4 views
1

BeautifulSoup을 사용하여 Python 크롤러를 만들려고하지만 파일에 문자열이 아닌 다른 문자 버퍼 유형을 쓰려고하는 중 오류가 발생합니다. 프로그램 출력을 검토 한 결과, 내 목록에 없음이라는 항목이 많이 있음을 발견했습니다. 없음을 갖는 것에 더하여, 나는 또한 이미지가 많고 링크가 아니지만 내 목록의 이미지 링크입니다. 내 목록에만 URL을 어떻게 추가 할 수 있습니까?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

첫째로는 더 이상 모든 앵커는 당신이 당신의 오류가 발생 없음을 쓸하려고 있도록하는 HREF을 가지고 있기 때문에 BeautifulSoup3, 당신의 오류가 유지 find_all 및 설정을 사용하지 bs4를 사용 HREF = 그래서 당신은 단지 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'와 같은 것입니다. –

관련 문제