【问题标题】:Extract text from a file object using .read()使用 .read() 从文件对象中提取文本
【发布时间】:2011-06-05 17:09:04
【问题描述】:

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

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

可能是我不知道的错误?
有谁知道在不先将其放入文本文件的情况下完成上述工作的更好方法?

【问题讨论】:

    标签: python urllib2 urlopen


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        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
        

        【讨论】:

          【解决方案4】:

          我认为你错过了 read 所做的事情。试试:

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

          【讨论】:

            【解决方案5】:
            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来解析它

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-11-15
              • 2013-02-20
              • 1970-01-01
              相关资源
              最近更新 更多