使用.read()从文件对象中提取文本

时间:2011-06-05 17:09:04

标签: python urllib2 urlopen

我正在尝试使用此代码阅读网站的来源:

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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

.read()实际上并未更改z的状态。请改用z=z.read()

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我认为你错过了read的所作所为。尝试:

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

答案 4 :(得分:0)

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自己解析它