31

urllib2用来在页面中阅读。我需要对源代码进行快速正则表达式并提取一些变量,但urllib2呈现为文件对象而不是字符串。

我是 python 新手,所以我很难了解如何使用文件对象来执行此操作。有没有一种快速的方法可以将其转换为字符串?

4

3 回答 3

77

您可以在交互模式下使用 Python 来搜索解决方案。

如果f是你的对象,你可以进入dir(f)查看所有的方法和属性。有一个叫read。Enterhelp(f.read)并告诉您这f.read()是从文件对象中检索字符串的方法。

于 2008-12-06T12:47:18.957 回答
14

从文档file.read()(我的重点):

文件读取([大小])

从文件中读取最多 size 个字节(如果读取在获得 size 个字节之前达到 EOF,则更少)。如果 size 参数为负数或省略,则读取所有数据,直到达到 EOF。字节作为字符串对象返回。立即遇到 EOF 时返回一个空字符串。(对于某些文件,如 ttys,在 EOF 被命中后继续读取是有意义的。)请注意,此方法可能会多次调用底层 C 函数 fread 以获取尽可能接近 size 的字节。另请注意,在非阻塞模式下,即使没有给出大小参数,返回的数据也可能少于请求的数据。

请注意,对大字符串对象进行正则表达式搜索可能效率不高,并考虑使用file.next()逐行进行搜索(文件对象是它自己的迭代器)。

于 2008-12-06T13:07:39.833 回答
5

Michael Foord,又名 Voidspace 有一个关于 urllib2 的优秀教程,你可以在这里找到: urllib2 - The Missing Manual

您所做的应该非常简单,请注意以下示例代码:

import urllib2
import re
response = urllib2.urlopen("http://www.voidspace.org.uk/python/articles/urllib2.shtml")
html = response.read()
pattern = '(V.+space)'
wordPattern = re.compile(pattern, re.IGNORECASE)
results = wordPattern.search(html)
print results.groups()
于 2008-12-06T13:17:59.300 回答