2010-01-03 5 views
4

NLP 프로젝트에 대해서는 Wikipedia에서 무작위로 많은 페이지 (예 : 10000)를 다운로드하려고합니다. 너비 우선 검색 방식으로 링크에 대한 HTML 구문 분석많은 수의 Wikipedia 페이지 받기

  1. 열고 위키 백과 페이지
  2. 반복적으로 열린 링크의 각 페이지를 엽니 다 : 전체 XML 덤프를 다운로드하지 않고, 이것은 내가 생각할 수있는 것입니다 2에서 얻은 페이지

2 단계와 3 단계에서 원하는 페이지 수에 도달하면 종료합니다.

어떻게 할 수 있습니까? 생각할 수있는 더 좋은 아이디어를 제안하십시오.

답 :

# Get 10000 random pages from Wikipedia. 
import urllib2 
import os 
import shutil 
#Make the directory to store the HTML pages. 
print "Deleting the old randompages directory" 
shutil.rmtree('randompages') 

print "Created the directory for storing the pages" 
os.mkdir('randompages') 

num_page = raw_input('Number of pages to retrieve:: ') 

for i in range(0, int(num_page)): 
    opener = urllib2.build_opener() 
    opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
    infile = opener.open('http://en.wikipedia.org/wiki/Special:Random') 

    page = infile.read() 

    # Write it to a file. 
    # TODO: Strip HTML from page 
    f= open('randompages/file'+str(i)+'.html','w') 
    f.write(page) 
    f.close() 

    print "Retrieved and saved page",i+1 
+0

위키 백과 직접, 당신은 단지 1000 '오류 페이지'를 얻을 것이다 봇을 사용하여 당신의 페이지를 다운로드하는 것을 허용하지 않습니다. 다른 사이트를 선택하십시오 :-) – Khelben

+1

Ups, 'User-agent', 'Mozilla/5.0'을 추가하여 멋진 다운로드를 허용하십시오. 어쨌든 위키 백과에서 자동으로 페이지를 다운로드하지 마십시오. – Khelben

답변

23
for i = 1 to 10000 
    get "http://en.wikipedia.org/wiki/Special:Random" 
+3

이것은 중복을 줄 수 있습니다. – SLaks

+2

이미 다운로드 한 페이지는 무시해도됩니다. –

+2

이것은 중복을 줄 수도 있지만,별로 중요하지 않습니다. +1 빠른 생각. –

0

당신은 주위의 요구 사항의 대부분을 최종 실행을 할 수 있습니다 :

http://cs.fit.edu/~mmahoney/compression/enwik8.zip

는 ZIP 파일이이 내 파이썬 코드 이미 100MB의 Wikipedia가 포함되어 있습니다. 링크 된 파일의 크기는 ~ 16MB입니다.

0

DBpedia project을 살펴보십시오.

적어도 몇 개의 기사 URL이있는 다운로드 가능한 작은 덩어리가 있습니다. 10000을 파싱하면 조심스럽게 일괄 다운로드 할 수 있습니다 ...

20

위키 백과는 API입니다.

http://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=5 

및 각 기사에 대한 당신은 또한 전화 위키 텍스트 얻을 :이 API를 사용하면 특정 네임 스페이스에있는 임의 문서를 얻을 수 있습니다

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Main%20Page&rvprop=content 
+3

HTML 대신 wiki 텍스트를 가져 오는 경우 – iamamac

+0

Python에서 API를 사용 해본 경험이 있습니까? 모든 파이썬 라이브러리? –

+1

API는 JSON 또는 XML로 데이터를 반환합니다. 그래서 어떤 언어라도 이러한 종류의 구조화 된 데이터를 구문 분석 할 수 있다고 생각합니다. 여기에도 많은 라이브러리가 있습니다. http://www.mediawiki.org/wiki/API:Client_Code#Python – Pierre

1

내가 반대 way-- 시작을 갈 것을 XML 덤프와 함께, 그리고 당신이 원하지 않는 것을 던지십시오.

자연어 처리를하려는 경우, 링크 목록이 아닌 완전한 문장이있는 페이지에 관심이 있다고 가정합니다. 당신이 당신이 묘사하는 방식으로 링크를 거미면, 당신은 많은 링크 페이지를 때릴거야.

왜 XML을 피하시겠습니까? 선택 프로세스를 더 쉽게 해주는 XML 구문 분석 도구를 사용할 때 이점이 있습니까?

+3

압축되지 않은 여러 테라 바이트이기 때문에 사용할 수 있습니다. –

0

오랫동안 알고 있었지만 robot.txt 파일을 위반하지 않고 많은 위키 피 디아 페이지 (또는 전체 위키피디아)를 크롤링하고 다운로드하는 효율적인 방법을 찾고있는 사람들을 위해 'Webb'라이브러리가 유용합니다. . 여기 링크입니다 :

Webb Library for Web Crawling and Scrapping

관련 문제