#python #beautifulsoup #python-requests #web-crawler
#python #beautifulsoup #python-запросы #веб-сканер
Вопрос:
Я пытаюсь проанализировать некоторые страницы с помощью 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?view_op=search_authors&hl=en&mauthors=label:deep_learning
он внезапно останавливается и показывает ошибку:
Как я могу отфильтровать искомые страницы, чтобы избежать этой проблемы? Мне не обязательно нужны все страницы в результате поиска.
Комментарии:
1. Вы могли бы попробовать
urllib.parse.unquote(url)
Ответ №1:
Некоторые из ваших URL-адресов заключены в кавычки. Это можно легко удалить, используя unquote()
функцию Python следующим образом:
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_authorsamp;hl=enamp;mauthors=label:deep_learning