我正在使用BeautifulSoup来抓取webpage和ez_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的所有文本?
答案 0 :(得分:0)
问题在于您尝试将Python源代码解析为HTML,然后将文本从中删除。
所以,第318行是:
if sys.version_info < (2, 6):
这恰好是文件中的第一个<
字符。由于您尝试将其解析为HTML,这意味着文件的其余部分都是HTML标记的一部分,永远不会完成。
根据您使用的三个解析器中的哪一个以及哪些版本,bs4可能会认为它不是标签,并且会提供您的原始数据,或者引发异常,或者删除整个虚假标记。
无论如何,修复很简单:不要将Python源代码解析为HTML。写下这个:
urllib2.urlopen(url['href']).read()