2016-12-03 1 views
0

나는 웹 스크래핑과 파이썬을 처음 접해 보았지만, 필자는 제 기능을 수정하는 방법에 조금 열중하고있었습니다. 내 임무는 특정 문자로 시작하는 단어 사이트를 긁어 내서 일치하는 항목 목록을 반환하는 것이 좋습니다. 정규식을 사용하는 것이 더 바람직합니다. 시간 내 주셔서 감사합니다. 아래 코드는 여기까지입니다. 가서이 말을하려고아름다운 스프가없는 웹 스크레이핑

import urllib 
import re 

def webscraping(website): 
    fhand = urllib.urlopen(website).read() 
    for line in fhand: 
     line = fhand.strip() 
     if line.startswith('h'): 
      print line 
webscraping("https://en.wikipedia.org/wiki/Web_scraping") 
+2

왜 아름다운 수프를 사용하고 싶지 않으세요? –

+0

우리는 프로그래밍 수업에서 아름다운 수프를 사용하는 법을 배웠지 않으며 사용하려고했던 모든 자원을 사용하고있었습니다. – Mayhem

+1

시도하지 말고 바퀴를 다시 발명하십시오. 웹 스크레이퍼는 스크래핑을 위해 정규 표현식을 사용하는 것보다 훨씬 쉬워집니다. 페이지가 변경되면 페이지가 어떻게 수정되었는지, 그리고 regex가 더 이상 필요/원하는 값을 선택하지 않으면 모든 정규 표현식이 더 이상 필요한 데이터를 가져 오지 않습니다. – serk

답변

1

: 절대적으로 HTML을 구문 분석 정규식을 사용하지 말아야하지

and return a list of the ones that match, preferably using regex. 

번호 당신이 . 그래서 우리는 그 직업에 맞는 HTML 파서를 가지고 있습니다.

사용 BeautifulSoup, 그것은 모든 내장을 가지고 있으며이 같은 것을 할 비교적 쉽게 : 당신은이 여기 아름다운 수프 을 사용할 수 있습니다 (테스트되지 않음)

def webscraping(website): 

    fhand = urllib.urlopen(website).read() 
    soup = BeautifulSoup(fhand, "html.parser") 
    soup.find_all(text=lambda x: x.startswith('h')) 
0

는 HTML을 구문 분석 정규식을 사용하지 않습니다를 예

import urllib 
from BeautifulSoup import * 

todo = list() 
visited = list() 
url = raw_input('Enter - ') 
todo.append(url) 

while len(todo) > 0 : 
    print "====== Todo list count is ",len(todo) 
    url = todo.pop() 

    if (not url.startswith('http')) : 
     print "Skipping", url 
     continue 

    if (url.find('facebook') > 0) : 
     continue 

    if (url in visited) : 
     print "Visited", url 
     continue 

    print "===== Retrieving ", url 

    html = urllib.urlopen(url).read() 
    soup = BeautifulSoup(html) 
    visited.append(url) 

    # Retrieve all of the anchor tags 
    tags = soup('a') 
    for tag in tags: 
     newurl = tag.get('href', None) 
     if (newurl != None) : 
      todo.append(newurl) 
관련 문제