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

1 投票
5 回答
3551 浏览
提问于 2025-04-16 18:59

我正在尝试用这段代码读取一个网站的源代码:

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 个回答

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
2

.read() 这个方法其实并不会改变 z 的状态。你应该用 z=z.read() 这样的写法。

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

撰写回答