Python으로 Asp에 html을 요청할 때 잘못된 html이 옵니다.

satys의 이미지

Python의 urllib란 module을 가지고 html을 문서를 가지고 올려고 합니다.

그런데 문제는 같은 Url(http://www.biocarta.com/search/gene.asp?gene=&ID1=14760)을

웹브라우저의 주소에 넣고 열면 제대로 된 페이지로 가는데

Urllib로 Html을 가지고 오면 페이지를 보여줄수 없다는 html을 가지고 오게 됩니다.

(WrongAnswer.html에 저장됨)

웹브라우저에서는 http://www.biocarta.com/search/genesrchresults.asp의 Url로 넘어가서

제대로 된 결과가 나오는데 Urllib가 이러한 redirection을 제대로 못해줘서 그런건가요?

처음 Url의 gene.asp에서 결과의 genesrchresults.asp로 넘어가는 과정을 모르겠네요.

익스플로어만이 아니라 오페라 브라우저에서도 제대로 보이는 걸로 봐서 MS제품만 되고 그런건

아닌 것 같은데...

제가 찾아본 것은 Redirection Error인 301, 302 Error를 urllib가 처리 못 하는 게 아닐까 했는데

그건 아닌 것 같습니다.(Urllib2 module의 스펙에는 301, 302를 처리하는데 urllib2로도 안 됩니다.)

아래는 python 소스 코드입니다

그럼 답변 감사합니다.

import urllib, re, urllib2, webbrowser

outFh = open('WrongAnswer.html', 'w')

UrlThatIWantToGet = 'http://www.biocarta.com/search/gene.asp?gene=&ID1=14760'

print '>>>This is Url of html that I want to get:\n\t%s'%(UrlThatIWantToGet)

UrlObject = urllib.urlopen(UrlThatIWantToGet)

# Returned Html was print to WrongAnser.html
print >>outFh, UrlObject.read()

print UrlObject.info(),
print UrlObject.geturl()

print '>>>Returned Html was printed to WrongAnswer.html in current directory'

# If Same Url was opened by Webbrower(Explore, Opera), I can get right response Html
webbrowser.open(UrlThatIWantToGet)
progcom의 이미지

Python은 모르지만, 확실한건, 'HTTP 프로토콜은 정직합니다'.

제대로된 요청을 한다면 정확한 답을 돌려주게 되어있습니다.
이는 페이지를 어떤 방식으로 생성하냐와는 관계가 없습니다.
(ASP라고 해서 안되는건 없습니다. 이는 어짜피 서버단에서 실행이 종료됩니다)

에러가 발생한다면, 일단 HTTP 헤더가 전송되는 부분을 살펴보시면 어떨까 싶습니다.
요청을 할 때 Host: 헤더가 없다면, 가상호스트를 사용하는 서버에 대한 접속은 잘못 될 수 있으며, 혹은 서버측에서 브라우저 등을 인식하게 해놓았을 수도 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.