2017-05-11 5 views
1

여러 웹 사이트를 읽고 필요한 정보를 얻은 다음 계속 진행하려고합니다. 파이썬 코드가 일부 웹 사이트에 있지만. 나는 실제 브라우저에서 임의의 시간에 웹 사이트가 완전히로드되지 못하고로드하는 광고를 기다리고있는 것으로 나타났습니다 ...?바이트를 제한하여 웹 사이트 부분 읽기

필요한 정보는 웹 사이트의 처음 50kb 내에 있습니다. 시간 제한을 사용하면 연결 (urllib, urlib3 및 pycurl)을 시도한 모든 모듈에서 전체 응답이 손실됩니다. 또한 pycurl에서 set RANGE 옵션은 URL에 대해 아무 것도하지 않는 것으로 보입니다.

제한 시간을 호출 할 때 이미 수신 한 콘텐츠를 저장하는 방법을 아는 사람이 있습니까? 또는 누군가가 효과적으로 콘텐츠를 특정 바이트 수로 제한하는 방법을 알고 있습니까?

+0

일반적으로 많은 광고가있는 웹 사이트에서 지연이 발생합니다. 이 같은; https://www.yahoo.com/news/ – jsfa11

+0

데이터 위치의 추정치가 50kb로 높습니다. 번호는 웹 사이트의 디코딩 된 텍스트를 저장 한 다음 원하는 위치 다음에 파일 크기를보고 삭제합니다. 요점은 정보가 전송 초기에 오는 것입니다. – jsfa11

+0

''stream = True'로'requests'을 시도해보고 처음으로 50kb를 읽어보십시오 –

답변

1

pycurl은 여전히 ​​시간 초과가 될 때까지 버퍼에 쓸 것입니다. 시간 초과가 발생하면 오류를 포착하고 버퍼를 검색 할 수 있습니다. 다음은 내가 사용한 코드입니다.

try: 
     buffer = BytesIO() 
     http_curl = pycurl.Curl() 
     http_curl.setopt(pycurl.URL, url) 
     http_curl.setopt(http_curl.WRITEDATA, buffer) 
     http_curl.setopt(http_curl.FOLLOWLOCATION, True) 
     http_curl.setopt(http_curl.TIMEOUT_MS, 1000) 
     http_curl.perform() 
     http_curl.close() 
    except pycurl.error: 
     response = buffer.getvalue() 
     response = response.decode('utf-8') 
     print(response) 
     pass 

페이지가 부분적으로 다운로드되어 인쇄되었습니다. 작업을 자극 한 t.m.adam에게 감사드립니다.