2014-02-07 4 views
1

사용자가 뉴스 기사에 대한 URL을 입력 할 수있는 스크립트를 작성하려고합니다. 그런 다음 해당 URL을 읽고 기본 정보를 긁어냅니다. 제목, 저자 및 기사 자체의 콘텐츠를 빠르게 얻을 수 있기를 바랍니다. 그런 다음 텍스트 문서로 덤프하십시오.python 웹 스크랩에서 콘텐츠를 반환합니다.

내가 겪었던 문제는이 작업을 수행하는 데 엄청난 다른 방법이있는 것 같고 파이썬을 처음 사용하기 때문에 커뮤니티에이 문제에 접근하는 최선의 방법에 대한 통찰력이 있다고 생각했습니다. 의견이나 지시에 감사드립니다.

업데이트 * 여기 올바른 문제를 해결하는 것이 핵심 문제인 것 같습니다. 내가 필요한 것은 사용자 입력에 의해 결정된 뉴스 웹 사이트의 단락을 다듬을 수 있어야한다는 것입니다. 어떤 제안?

+0

좋은 이유가없는 한 [아름다운 수프] (http://www.crummy.com/software/BeautifulSoup/)를 사용하십시오. 이것은 일반적으로 Python에서 HTML을 파싱하는 가장 직접적인 방법으로 동의합니다. – senshin

+0

나는 Beautiful Soup을 가지고 놀고 있었지만 협조하기 어려웠다. 나는 문서를 자세히 살펴볼 것이다 – user3285763

답변

2

Beautiful Soup은 특히 이와 같은 빠른 작업을 위해 가장 널리 사용되는 웹 스크랩 라이브러리 중 하나입니다.

import urllib2 
from bs4 import BeautifulSoup 

page = urllib2.urlopen('http://yahoo.com').read() 

soup = BeautifulSoup(page) 

# The page's title without html tags 
soup.title.string 

는 HTML 구조에 따라 달라집니다, 기사의 저자처럼, 페이지에 특정 항목을 찾기하지만 특정 CSS 태그를 찾고에 의존 전망이다 : 여기가 보일 것이다 방법

soup.find(id="author") 

다음은 좀 더 구체적인 예입니다. 당신이 소스를 통해 보면 http://blog.sfgate.com/energy/2014/02/07/tesla-driver-blames-fatal-crash-on-new-car-smell/

, 당신은 기사 제목 클래스 blogtitle<h1> 요소이며, 저자의 이름이 내부 링크입니다 것을 알 수 있습니다 :이 같은 SFGate 기사의 무리를 찾고 말 post-author<span>이다. 당신이 예에서 볼 수 있듯이

import urllib.request 
from bs4 import BeautifulSoup 

page = urllib.request.urlopen('http://blog.sfgate.com/energy/2014/02/07/tesla-driver-blames-fatal-crash-on-new-car-smell/').read() 

soup = BeautifulSoup(page) 

## Title ## 
# Find the first h1 tag of class 'blogtitle' 
title = soup.find("h1", "blogtitle") 
# Print out just the string 
print(title.string) 

## Author ## 
# Find the first span of class 'post-author' 
author_container = soup.find("span", "post-author") 
# Search inside that span for the first link 
author = author_container.find("a").string 
print(author) 

, 당신은 각 웹 페이지의 특정 구조에 맞게 코드를 사용자 정의해야합니다, 따라서 그것은 매우 취약 할 수있다 : 즉, 다음과 같은 코드를 동일시한다. 자세한 내용은 Beautiful Soup docs을 참조하십시오.

+0

고맙습니다. 매우 도움이됩니다. 나는 이것을 좀더 엉망으로 만들 것이고 내가 무엇을 생각해 내는지 볼 것이다. – user3285763