为什么我没有收到此页面的全文?

时间:2013-10-26 01:11:00

标签: python python-2.7 file-io beautifulsoup

我正在使用BeautifulSoup来抓取webpageez_setup.py脚本链接的点子安装指南get-pip.py。当我找到这些链接时,我使用BeautifulSoup的get_text()来获取所有文本。

现在,这适用于get-pip.py链接,但不适用于ez_setup.py链接。我检索get-pip.py的所有文本但是对于ez_setup.py我只检索到第318行的文本,这甚至不是完整的第318行。

317    if options.user_install:
318        if sys.version_info 

这是我的代码。

#imports

def makeSoup(url):
    return BeautifulSoup(urllib2.urlopen(url).read())

url = "http://www.pip-installer.org/en/latest/installing.html"
for url in makeSoup(url).find_all('a', attrs = {'href':re.compile(r'py$')}):
    with open(desktop + "\\" + url['href'].split('/')[-1], "w", 0) as file:
        file.write(makeSoup(url['href']).get_text())

如何检索ez_setup.py的所有文本?

1 个答案:

答案 0 :(得分:0)

问题在于您尝试将Python源代码解析为HTML,然后将文本从中删除。

所以,第318行是:

    if sys.version_info < (2, 6):

这恰好是文件中的第一个<字符。由于您尝试将其解析为HTML,这意味着文件的其余部分都是HTML标记的一部分,永远不会完成。

根据您使用的三个解析器中的哪一个以及哪些版本,bs4可能会认为它不是标签,并且会提供您的原始数据,或者引发异常,或者删除整个虚假标记。

无论如何,修复很简单:不要将Python源代码解析为HTML。写下这个:

urllib2.urlopen(url['href']).read()