ValueError:读取关闭的文件

时间:2019-04-24 18:37:11

标签: python beautifulsoup python-requests web-crawler

我正在尝试使用 BeautifulSoup 解析某些页面,但是对于某些链接,打开器无法使用。这是开启器的代码:

class URLopener(urllib.request.FancyURLopener):
    version = "Mozilla/5.0"
    def http_error_default(self, url, fp, errcode, errmsg, headers):
        if errcode == 403:
            raise ValueError("403")
        return super(URLopener, self).http_error_default(
            url, fp, errcode, errmsg, headers
        )

现在,当它尝试使用此代码打开并解析某些页面时:

opener = URLopener()
page = opener.open(url)
soup = BeautifulSoup(page.read(), features='lxml')
links = soup.findAll("a", href=True)

它工作正常。但是当它到达这样的链接时:

  

http://scholar.google.com/citations%3Fview_op%3Dsearch_authors%26hl%3Den%26mauthors%3Dlabel:deep_learning

它突然停止并显示错误:

enter image description here

如何过滤搜索到的页面以避免出现此问题?我不一定要搜索结果中的所有页面。

1 个答案:

答案 0 :(得分:1)

您的某些URL用引号引起来。可以使用Python的unquote()函数轻松地将其删除,如下所示:

import urllib.parse


opener = URLopener()
page = opener.open(urllib.parse.unquote(url))
soup = BeautifulSoup(page.read(), features="lxml")
links = soup.find_all("a", href=True)

这会将您提供的示例URL转换为以下格式:

http://scholar.google.com/citations?view_op=search_authors&hl=en&mauthors=label:deep_learning