Извлечь текст из файлового объекта с помощью .read () - PullRequest
1 голос
/ 05 июня 2011

Я пытаюсь прочитать исходный сайт с этим кодом:

import urllib2
z=urllib2.urlopen('http://skreemr.com/results.jsp?q=said+the+whale&search=SkreemR+Search')
z.read()
print z
txt = open('music.txt','w')
txt.write(str(z))
txt.close()
for i in open('music.txt','r'):
        if '''onclick="javascript:pageTracker._trackPageview('/clicks/''' in i:
                print i

И все, что я получаю за исходный код:

<addinfourl at 51561608L whose fp = <socket._fileobject object at 0x0000000002CCA480>>

Это может быть ошибка, которую я не знаю?
Кто-нибудь знает, как лучше выполнить вышеуказанную работу, не помещая ее сначала в текстовый файл?

Ответы [ 5 ]

4 голосов
/ 05 июня 2011

z является файловым объектом. На самом деле ваши коды печатает описание объекта. Вам нужно поместить результат z.read() в переменную (или распечатать его напрямую).

Вы должны сделать

import urllib2
z=urllib2.urlopen('http://skreemr.com/results.jsp?q=said+the+whale&search=SkreemR+Search')
i = z.read()
print i
2 голосов
/ 05 июня 2011

.read() фактически не меняет состояние z. Вместо этого используйте z=z.read().

1 голос
/ 05 июня 2011

z - это файловый объект.str(z) просто дает вам представление, которое вы видите.

Вам нужно сохранить строку (содержимое файла), возвращаемую z.read().

Еще лучше, просто итерируйтеповерх него:

import urllib2
z=urllib2.urlopen('http://skreemr.com/results.jsp?q=said+the+whale&search=SkreemR+Search')
for i in z:
    if '''onclick="javascript:pageTracker._trackPageview('/clicks/''' in i:
        print i
0 голосов
/ 05 июня 2011
with open('music.txt','w') as out:
    out.write(urllib2.urlopen('http://skreemr.com/results.jsp?q=said+the+whale&search=SkreemR+Search').read()

Но это только HTML-код страницы, вам нужно будет разобрать его самостоятельно, используя красивый суп или lxml

0 голосов
/ 05 июня 2011

Я думаю, вам не хватает того, что делает read.Попробуйте:

data = z.read()
print data
with open('music.txt','w') as txt:
    txt.write(data)
...