我正在尝试阅读整个网页并将其分配给变量,但我很难做到这一点。该变量似乎只能保存页面源的前512行左右。
我尝试使用readlines()将源的所有行打印到屏幕上,这给了我完整的源代码,但是我需要能够用正则表达式解析它,所以我需要将它存储在某种变量。帮助
data = urllib2.urlopen(url)
print data
只给了我1/3的来源。
data = urllib2.urlopen(url)
for lines in data.readlines()
print lines
这给了我整个来源。
就像我说的,我需要能够用正则表达式解析字符串,但我需要的部分不是在我能够存储在变量中的前1/3中。
答案 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
来提取所需的信息!