PYTHON写爬虫时用到的相对路径-urljoin

本文介绍了如何使用Python的urljoin函数来将相对路径转换为绝对路径。通过几个实例展示了不同类型的相对路径如何被正确地解析并附加到基准URL上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用URLJOIN从相对路径获取绝对路径:

>>> from urlparse import urljoin
>>> urljoin("http://www.asite.com/folder/currentpage.html", "anotherpage.html")
'http://www.asite.com/folder/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "folder2/anotherpage.html")
'http://www.asite.com/folder/folder2/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "/folder3/anotherpage.html")
'http://www.asite.com/folder3/anotherpage.html'
>>> urljoin("http://www.asite.com/folder/currentpage.html", "../finalpage.html")
'http://www.asite.com/finalpage.html'


<think>好的,用户想学习如何用Python爬虫来抓取图片。我需要根据提供的引用内容来组织回答。首先,引用里提到了使用Requests和BeautifulSoup这两个库,可能还有其他的库比如lxml或者Scrapy,不过用户是初学者,应该先从简单的开始。 第一步,可能需要先安装必要的库。引用2和3都提到了Requests和BeautifulSoup,所以需要告诉用户安装这两个库的命令。另外,处理图片链接可能需要用到正则表达式或者其他的解析方法,比如检查文件后缀名。 接下来是步骤分解。第一步应该是发送HTTP请求获取网页内容,这里用Requests库的get方法,然后检查状态码是否为200。第二步是解析HTML内容,提取图片链接。BeautifulSoup可以帮助找到所有的img标签,然后获取src属性。可能需要处理相对路径的情况,所以要用urljoin来补全完整的URL。 第三步是下载图片,这里可能需要用到Requests的流传输模式,特别是大文件的候,避免一次性加载到内存。同需要确定保存路径和文件名,可能要从URL中提取文件名,或者自己生成唯一的文件名。 另外,可能需要处理不同类型的图片,比如检查后缀是否是.jpg、.png等。还有可能遇到反爬虫机制,比如设置User-Agent头,或者添加延迟。不过用户的需求是基础,可能暂不需要涉及这些高级内容,但可以提到一些优化的方向。 还要注意法律和网站规则,确保用户遵守robots.txt和版权法。这部分虽然用户没问,但作为负责任的回答应该提醒。 最后,生成相关问题,可能涉及如何提高爬虫效率、处理动态加载图片、或者存储图片的方法等。这些问题可以帮助用户进一步学习。 现在检查是否需要使用正确的LaTeX格式,但问题不涉及数学公式,所以可能不需要。但需要确保代码块正确,使用Python语法高亮。同引用标记要正确添加,比如引用1、2、3对应的内容。 总结回答的结构:安装库,步骤分三步,代码示例,注意事项,相关问题。确保每个步骤引用正确的来源,比如引用2和3提到Requests和BeautifulSoup,引用1提到爬虫的基本步骤。</think>以下是使用Python爬虫抓取网页图片的分步指南: ### 第一步:安装依赖库 ```bash pip install requests beautifulsoup4 ``` 需要核心库: - `requests`:发送HTTP请求[^2][^3] - `beautifulsoup4`:解析HTML文档[^3] ### 第二步:网页内容抓取 ```python import requests url = "https://example.com" headers = {"User-Agent": "Mozilla/5.0"} # 模拟浏览器访问 response = requests.get(url, headers=headers) if response.status_code == 200: html_content = response.text ``` ### 第三步:解析图片链接 ```python from bs4 import BeautifulSoup from urllib.parse import urljoin soup = BeautifulSoup(html_content, "html.parser") img_tags = soup.find_all("img") img_urls = [] for img in img_tags: src = img.get("src") if src: # 处理相对路径 full_url = urljoin(url, src) img_urls.append(full_url) ``` ### 第四步:图片下载存储 ```python import os save_dir = "downloaded_images" os.makedirs(save_dir, exist_ok=True) for idx, img_url in enumerate(img_urls): try: response = requests.get(img_url, stream=True) if response.status_code == 200: # 提取文件扩展名 ext = img_url.split(".")[-1].lower() if ext not in ["jpg", "jpeg", "png", "gif"]: ext = "jpg" # 默认格式 file_path = os.path.join(save_dir, f"image_{idx}.{ext}") with open(file_path, "wb") as f: for chunk in response.iter_content(1024): f.write(chunk) except Exception as e: print(f"下载失败:{img_url},错误:{str(e)}") ``` ### 关键优化点 1. 添加延防止封禁: ```python import time time.sleep(1) # 在请求之间添加1秒延迟 ``` 2. 支持多线程下载(示例): ```python from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=5) as executor: executor.map(download_image, img_urls) ``` ### 注意事项 - 遵守网站的`robots.txt`规则 - 检查目标网站的版权声明 - 控制请求频率避免服务器压力
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值