urllib2
是 Python 2 中用于处理 URL 的标准库,而 requests
是一个更现代、更人性化的第三方库,用于发送 HTTP 请求。在 Python 3 中,urllib2
被拆分并重命名为 urllib.request
和 urllib.error
等模块。以下是使用 urllib.request
抓取谷歌学者页面的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法。
import urllib.request
from urllib.error import HTTPError, URLError
url = 'https://scholar.google.com/scholar?q=python'
try:
response = urllib.request.urlopen(url)
html = response.read()
print(html)
except HTTPError as e:
print(f'HTTP 错误: {e.code}')
except URLError as e:
print(f'URL 错误: {e.reason}')
原因:服务器返回了非 200 的状态码。
解决方法:使用 try-except
捕获 HTTPError
并处理。
try:
response = urllib.request.urlopen(url)
except HTTPError as e:
print(f'HTTP 错误: {e.code}')
原因:URL 格式不正确或网络连接问题。
解决方法:使用 try-except
捕获 URLError
并处理。
try:
response = urllib.request.urlopen(url)
except URLError as e:
print(f'URL 错误: {e.reason}')
原因:谷歌学者可能有反爬虫机制,阻止自动化工具访问。
解决方法:
import urllib.request
url = 'https://scholar.google.com/scholar?q=python'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
req = urllib.request.Request(url, headers=headers)
try:
response = urllib.request.urlopen(req)
html = response.read()
print(html)
except HTTPError as e:
print(f'HTTP 错误: {e.code}')
except URLError as e:
print(f'URL 错误: {e.reason}')
使用 urllib.request
可以实现基本的网页抓取功能,但在处理复杂的网络请求时,requests
库通常更为方便和强大。如果遇到反爬虫机制,可以通过设置 User-Agent 或使用代理来解决。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云