利用requests模块爬取任意网页数据:以图片形式提交程序代码及运行结果。
时间: 2024-12-02 08:28:30 浏览: 2
在Python中,`requests`是一个非常流行的库,用于发送HTTP请求并获取响应。如果你想利用它来爬取网页的数据,特别是图片,首先你需要安装这个库,如果你还没有安装,可以使用pip命令:
```bash
pip install requests
```
下面是一个简单的例子,展示如何使用`requests`下载网页上的图片:
```python
import requests
from PIL import Image
# 指定你要爬取的图片URL
url = 'http://example.com/image.jpg'
# 发送GET请求
response = requests.get(url)
# 检查请求是否成功(状态码通常为200)
if response.status_code == 200:
# 将图片二进制内容转化为Image对象
img_data = response.content
image = Image.open(io.BytesIO(img_data))
# 保存图片到本地文件
filename = 'downloaded_image.jpg'
with open(filename, 'wb') as f:
f.write(img_data)
print(f"图片已成功下载到'{filename}'")
else:
print("请求失败,状态码:", response.status_code)
相关问题
尽管Requests库功能很友好、开发简单(其实除了import外只需一行主要代码),但请编写一个小程序,“任意”找个url,测试一下成功爬取100次网页的时间。(某些网站对于连续爬取页面将采取屏蔽IP的策略,所以,要避开这类网站。)
在Python中,我们可以使用`requests`库配合`time`模块来实现这个简单的程序。首先,我们需要避免过于频繁地请求某个特定的URL以防止被封禁。这里我们将使用随机选取的URL列表,并设置一个合理的间隔时间。下面是一个基本示例:
```python
import requests
import time
from random import choice
# 避免的敏感关键词列表(可以根据实际情况修改)
blacklist_urls = ['https://example.com', 'https://api.example.com'] # 添加需要避开的网址
urls = [
"http://random.org", # 你可以替换为一个动态生成的URL列表,如:"https://news.ycombinator.com/"
"https://github.com",
"https://www.reddit.com",
"https://openweathermap.org"
] - set(blacklist_urls) # 去除黑名单中的url
start_time = time.time()
for _ in range(100):
url = choice(urls)
try:
response = requests.get(url, timeout=5) # 设置超时限制
if response.status_code == 200:
print(f"Successfully fetched URL: {url}")
else:
print(f"Failed to fetch URL: {url}, status code: {response.status_code}")
# 等待一段时间,模拟人类操作
time.sleep(1) # 调整间隔以降低请求频率
except requests.exceptions.RequestException as e:
print(f"Error occurred: {e}")
end_time = time.time()
total_time = end_time - start_time
print(f"\nTotal time taken for 100 requests: {total_time} seconds")
尽管Requests库功能很友好、开发简单(其实除了import外只需一行主要代码),但其性能与专业爬虫相比还是有一定差距的。请编写一个小程序,“任意”找个url,测试一下成功爬取100次网页的时间。(某些网站对于连续爬取页面将采取屏蔽IP的策略,所以,要避开这类网站。)
使用Python的`requests`库进行快速爬取确实方便,但对于大规模数据抓取和性能优化,它可能不如专业的如Scrapy等框架。如果你想测试`requests`在爬取100次网页时的性能,可以参考以下示例代码,我们将使用`timeit`模块来进行计时:
```python
import time
import requests
from timeit import default_timer as timer
def test_request_performance(url):
response_time = []
for _ in range(100): # 爬取次数
start_time = timer()
try:
response = requests.get(url, timeout=10) # 设置超时时间防止阻塞
response.raise_for_status() # 检查HTTP状态码是否成功
except Exception as e:
print(f"Error occurred during request: {e}")
continue
end_time = timer()
response_time.append(end_time - start_time) # 记录每次请求的耗时
average_time = sum(response_time) / len(response_time) # 平均响应时间
print(f"平均每次请求响应时间为: {average_time} 秒")
# 避免频繁爬取可能导致封禁的网站,这里仅作演示,实际应用请替换为合适的URL
url = "https://www.example.com" # 替换为你要测试的合法URL
test_request_performance(url)
阅读全文