我正在尝试使用 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)
它工作正常。但是当它到达这样的链接时:
它突然停止并显示错误:
如何过滤搜索到的页面以避免出现此问题?我不一定要搜索结果中的所有页面。
答案 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