如何将整个网页读入变量

时间:2012-06-06 04:52:39

标签: python web-scraping urllib2

我正在尝试阅读整个网页并将其分配给变量,但我很难做到这一点。该变量似乎只能保存页面源的前512行左右。

我尝试使用readlines()将源的所有行打印到屏幕上,这给了我完整的源代码,但是我需要能够用正则表达式解析它,所以我需要将它存储在某种变量。帮助

 data = urllib2.urlopen(url)
 print data

只给了我1/3的来源。

 data = urllib2.urlopen(url)
 for lines in data.readlines()
      print lines

这给了我整个来源。

就像我说的,我需要能够用正则表达式解析字符串,但我需要的部分不是在我能够存储在变量中的前1/3中。

5 个答案:

答案 0 :(得分:5)

你可能正在寻找美丽的汤:http://www.crummy.com/software/BeautifulSoup/它是一个用于python的开源web解析库。祝你好运!

答案 1 :(得分:5)

您应该能够使用file.read()将整个文件读入字符串。这将为您提供全部资源。像

这样的东西
data = urllib2.urlopen(url)
print data.read()

应该为您提供整个网页。

从那里开始,不要用正则表达式解析HTML(这个效果很好的帖子here),而是使用专用的HTML解析器。或者,清理HTML并将其转换为XHTML(例如使用HTML Tidy),然后使用类似标准ElementTree的XML解析库。哪种方法最好取决于您的申请。

答案 2 :(得分:1)

实际上,print data不应该给你任何html内容,因为它只是一个文件指针。官方文件https://docs.python.org/2/library/urllib2.html

  

此函数返回类似文件的对象

这就是我得到的:

print data
<addinfourl at 140131449328200 whose fp = <socket._fileobject object at 0x7f72e547fc50>>

readlines()返回html源代码行列表,您可以将其存储在以下字符串中:

import urllib2
data = urllib2.urlopen(url)
l = []
s = ''
for line in data.readlines():
    l.append(line)
s = '\n'.join(l)

您可以根据需要使用列表l或字符串s

答案 3 :(得分:0)

我还建议使用开源Web解析库以便于工作,而不是使用正则表达式进行完整的HTML解析,任何方式都需要正则表达式进行URL解析。

答案 4 :(得分:0)

如果以后要解析变量,则可以使用gazpacho

from gazpacho import Soup

url = "https://www.example.com"
soup = Soup.get(url)
str(soup)

这样,您就可以执行find来提取所需的信息!