ValueError: чтение закрытого файла - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь разобрать некоторые страницы, используя 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 Ответ

1 голос
/ 26 апреля 2019

Некоторые из ваших 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
...