使用.read()从文件对象提取文本
我正在尝试用这段代码读取一个网站的源代码:
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