Seitenquelltext

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
pazera
User
Beiträge: 8
Registriert: Montag 10. März 2008, 17:05

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?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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/
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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!
pazera
User
Beiträge: 8
Registriert: Montag 10. März 2008, 17:05

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
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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')
Zuletzt geändert von snafu am Freitag 14. August 2009, 10:45, insgesamt 1-mal geändert.
pazera
User
Beiträge: 8
Registriert: Montag 10. März 2008, 17:05

Vielen vielen Dank,
das haette ich eigentlich merken muessen!

.... ein toller Zaubertrick :wink:
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ü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
pazera
User
Beiträge: 8
Registriert: Montag 10. März 2008, 17:05

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

BeautifulSoup ist pure Python, koenntest du also einfach in deinen Programmordner legen, um es zu benutzen.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Um genau zu sein: BS ist *eine* py-Datei.
Antworten