Seite 1 von 1

Seitenquelltext

Verfasst: Donnerstag 13. August 2009, 14:08
von pazera

Code: Alles auswählen

import urllib
opener = urllib.FancyURLopener({})
webpage = "http://alsusweb.lbl.gov/4DCGI/WEB_GetFormPublicationSearch.shtml/Initialize/index.html"
f = opener.open(webpage)
print f.read()

der output hierzu sieht so aus:
------------------------------------------------------------
<font face="times, times new roman,serif"><a href="http://www-als.lbl.gov/"><font face="Verdana, Arial, Helvetica, sans-serif" size="-2">Hom</html>ody>m>>nt> > a> </font><font face="Verdana, Arial, Helvetica, sans-serif" size="-1"> s.lbl.gov/als/science/latestsci.html">Science</a>
-------------------------------------------------------------

Dies ist aber nicht der Seitenquelltext, den ich sehe, wenn ich ueber Mozilla hereingehe. Anders gesagt, wie bekomme ich das, was auf einer WEB-Page zu sehen ist, in irgendeiner form als string?

Verfasst: Donnerstag 13. August 2009, 14:44
von cofi
Du meinst die vom Browser ausgewertete und gelayoutete HTML-Seite?

Gar nicht. Zumindest nicht so einfach.

Du musst mit einem HTML-Parser arbeiten und dir dann die Tags bzw. deren Inhalt raussuchen, die du willst.

http://blog.ianbicking.org/2008/03/30/p ... rformance/

Verfasst: Donnerstag 13. August 2009, 17:56
von Hyperion
Also ich sehe das hier:

Code: Alles auswählen

<HTML>
<HEAD>
   <TITLE>Page not found</TITLE>
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> 
</HEAD>
<BODY BGCOLOR="#FFFFFF">

<H1>Not found</H1>

<P>The requested page cannot be found, please check its location and
try again.</P>
</BODY>
</HTML>
Außerdem ist wirklich nicht genau klar, was Du meinst. Willst Du HTML-Quellcode oder eine grafische Ansicht?

Da die URL aber nicht funzt, kann man da schlecht sagen, wo das Problem liegt!

Verfasst: Freitag 14. August 2009, 10:09
von pazera
Sorry die webpage war falsch, hier ist die richtige:

Ich bin an dem Textinhalt der webpage interessiert. Es stoert mich nicht, wenn ich den Textinhalt eingebettet in dem Seitenquelltext (html) erhalten sollte. Eine grafische Ansicht brauche ich nicht.

Ich habe dies auch mit der "http://www.python.org/" webpage ausprobiert, hier scheint alles richtig zu funktionieren

urllib2 und htmllib habe ich auch getestet --> gleiches Ergebnis wie bei urllib

Verfasst: Freitag 14. August 2009, 10:41
von snafu
Ja, soweit trifft das auch bei mir zu:

Code: Alles auswählen

>>> from urllib import urlopen
>>> from contextlib import closing
>>> with closing(urlopen("http://alsusweb.lbl.gov/4DCGI/WEB_GetForm/PublicationSearch.shtml/Initialize")) as website: content = website.read()
... 
>>> print content
          <font face="times, times new roman,serif"><a href="http://www-als.lbl.gov/"><font face="Verdana, Arial [u.s.w.]
Aber guck mal, was passiert, wenn du dir den Inhalt quasi in Reinform anzeigen lässt:

Code: Alles auswählen

>>> content
'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\r<html>\r<head>\r<title>Publication Search</title>\r<meta [u.s.w]
Der Inhalt ist also schon komplett. Es wird allerdings immer ein Rücklauf gemacht (\r), ohne dass eine neue Zeile begonnen wird (das wäre \n), so dass die bisherige Zeile immer überschrieben wird.

Folgender Zaubertrick könnte also wahre Wunder wirken:

Code: Alles auswählen

print content.replace('\r', '\n')

Verfasst: Freitag 14. August 2009, 13:19
von pazera
Vielen vielen Dank,
das haette ich eigentlich merken muessen!

.... ein toller Zaubertrick :wink:

Verfasst: Freitag 14. August 2009, 14:23
von snafu
Übrigens willst du wahrscheinlich eh einen Parser verwenden, um die für dich relevanten Teile rauszufiltern. BeautifulSoup macht die Umwandlung bspw. von alleine:

Code: Alles auswählen

In [1]: from BeautifulSoup import BeautifulSoup

In [2]: from urllib import urlopen

In [3]: from contextlib import closing

In [4]: url = 'http://alsusweb.lbl.gov/4DCGI/WEB_GetForm/PublicationSearch.shtml/Initialize'

In [5]: with closing(urlopen(url)) as website:
   ...:     soup = BeautifulSoup(website.read())
   ...:     
   ...:     

In [6]: print soup

Verfasst: Montag 17. August 2009, 15:34
von pazera
Danke fuer den Tipp, leider habe ich keine Adminrechte auf dem Server, auf welchem Python installiert ist. Bin also auf die Laune der Admins angewiesen, wenn es um neue packages geht und deren Laune ist grundsaetzlich unter aller Sau.

Ich werde dann wohl das package zu Hause ausprobieren.

Verfasst: Montag 17. August 2009, 15:38
von cofi
BeautifulSoup ist pure Python, koenntest du also einfach in deinen Programmordner legen, um es zu benutzen.

Verfasst: Montag 17. August 2009, 15:55
von snafu
Um genau zu sein: BS ist *eine* py-Datei.