2012-06-06 2 views
6

전체 웹 페이지를 읽고 변수에 할당하려고하는데 문제가 있습니다. 이 변수는 페이지 소스의 첫 번째 512 줄 정도만 포함 할 수있는 것처럼 보입니다.전체 웹 페이지를 변수로 읽는 방법

원본의 모든 줄을 화면에 인쇄하려고했는데 원본 전체가 표시되었지만 정규식으로 파싱 할 수 있어야하므로 저장할 필요가 있습니다. 어쨌든 변수에. 도움?

data = urllib2.urlopen(url) 
print data 

원본의 1/3 만 제공합니다.

data = urllib2.urlopen(url) 
for lines in data.readlines() 
     print lines 

전체 소스를 제공합니다.

내가 말했듯이 정규 표현식으로 문자열을 구문 분석 할 수 있어야하지만, 필요한 부분이 처음 1/3에 있지 않아 내 변수에 저장할 수 있습니다.

+2

[다운로드 HTML 페이지 및 해당 콘텐츠] (http://stackoverflow.com/questions/1825438/download-html-page-and-its-content) –

답변

4

file.read()을 사용하여 전체 파일을 문자열로 읽을 수 있어야합니다. 그러면 전체 소스가 제공됩니다. 예 :

data = urllib2.urlopen(url) 
print data.read() 

등의 전체 웹 페이지를 제공해야합니다.

거기에서 HTML을 정규식 (이 효과가 좋은 게시물 here)으로 구문 분석하지 말고 대신 전용 HTML 구문 분석기를 사용하십시오. 또는 HTML을 정리하고이를 XHTML (예 : HTML Tidy)로 변환 한 다음 표준 ElementTree과 같은 XML 구문 분석 라이브러리를 사용합니다. 가장 적합한 접근 방법은 응용 프로그램에 따라 다릅니다.

+0

가능한 중복이 더 이상 내게 줄 수 없습니다. 내 첫 번째 예제보다 웹 페이지. – Rentafence

0

완전한 HTML 구문 분석을 위해 regex를 사용하는 대신에 opensource 웹 구문 분석 라이브러리를 사용하는 것이 좋습니다. URL 구문 분석을 위해 정규식이 필요합니다.

0

사실, print data은 파일 포인터이기 때문에 어떤 html 콘텐츠도 제공해서는 안됩니다. 공식 문서 https://docs.python.org/2/library/urllib2.html : HTML 소스 라인의

print data 
<addinfourl at 140131449328200 whose fp = <socket._fileobject object at 0x7f72e547fc50>> 

readlines() 반환 목록과 당신이 그것을 저장할 수 :

이 기능은이 내가 가진 무엇을 파일 - 류의 객체

에게 반환 같은 문자열에 :

import urllib2 
data = urllib2.urlopen(url) 
l = [] 
s = '' 
for line in data.readlines(): 
    l.append(line) 
s = '\n'.join(l) 

필요에 따라 l 또는 s 문자열을 사용할 수 있습니다.

관련 문제