2011-06-05 53 views
1

我想使用此代码读取网站的源:提取文本()

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>> 

这可能是一个我不知道的错误?
有没有人知道更好的方式来完成上述工作,而不是首先将其放入文本文件中?

回答

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 
0

我想你错过了什么read。尝试:

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

.read()实际上并没有改变z状态。改为使用z=z.read()

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

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