2011-06-05 98 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