- 提取图片链接并处理错误
- 安装库:
确保已经安装了
requests
和BeautifulSoup
库。如果没有安装,可以使用pip install requests beautifulsoup4
进行安装。
- 代码实现:
import requests
from bs4 import BeautifulSoup
from requests.exceptions import HTTPError
def get_image_links(url):
try:
# 发送HTTP GET请求
response = requests.get(url)
# 检查HTTP状态码,如果是4xx或5xx则抛出异常
response.raise_for_status()
except HTTPError as http_err:
print(f'HTTP error occurred: {http_err}')
return []
except Exception as err:
print(f'Other error occurred: {err}')
return []
try:
soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img')
image_links = [img.get('src') for img in img_tags if img.get('src')]
return image_links
except Exception as parse_err:
print(f'Parse error occurred: {parse_err}')
return []
- 优化使用以提高爬虫效率
- 请求优化:
- 设置合理的超时时间:在
requests.get
中设置timeout
参数,避免请求长时间等待。例如response = requests.get(url, timeout = 5)
,5秒后如果没有响应则抛出异常,这样可以快速处理无响应的链接。
- 复用连接:使用
requests.Session
对象,它可以在多个请求之间保持连接,减少建立新连接的开销。例如:
session = requests.Session()
response = session.get(url)
- 解析优化:
- 选择合适的解析器:
BeautifulSoup
支持多种解析器,如html.parser
、lxml
等。lxml
通常比html.parser
更快,安装lxml
库后可以使用soup = BeautifulSoup(response.text, 'lxml')
。
- 减少不必要的解析:如果只需要获取图片链接,直接使用
find_all('img')
而不是先解析整个文档再筛选,这样可以减少解析工作量。