-1

我正在使用 BeautifulSoup为ez_setup.pyget-pip.py脚本链接抓取 pip 安装指南网页。当我找到这些链接时,我使用 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 的所有文本?

4

1 回答 1

0

问题是您试图将 Python 源代码解析为 HTML,然后将文本从其中剥离出来。

所以,第 318 行是:

    if sys.version_info < (2, 6):

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

根据您使用的三个解析器中的哪一个以及哪个版本,bs4 可能会确定它毕竟不是标签,并为您提供原始数据,或者引发异常,或者去掉整个虚假标签。

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

urllib2.urlopen(url['href']).read()
于 2013-10-26T01:24:48.303 回答