请编写爬虫是用正则爬取页面的图片,请求实现一个单进程版本,以及一个多线程版本。
时间: 2024-06-09 09:12:10 浏览: 59
Python之多线程爬虫抓取网页图片的示例代码
好的,我可以为您提供一个Python的示例代码,使用正则表达式爬取页面的图片,并实现单进程版本和多线程版本。
首先,我们需要导入必要的库:
```python
import requests
import re
from threading import Thread
```
然后,我们定义一个函数`get_img_urls(url)`,用于从给定的URL中提取所有图片的URL。
```python
def get_img_urls(url):
# 发送GET请求
response = requests.get(url)
# 使用正则表达式提取所有图片的URL
img_urls = re.findall(r'<img .*?src="(.*?)"', response.text)
# 返回图片URL列表
return img_urls
```
接下来,我们可以使用单进程版本来实现:
```python
url = 'https://www.example.com'
img_urls = get_img_urls(url)
for img_url in img_urls:
# 发送GET请求
response = requests.get(img_url)
# 保存图片
with open(img_url.split('/')[-1], 'wb') as f:
f.write(response.content)
```
这个单进程版本很简单,它只是从给定的URL中提取所有图片的URL,并一次下载一个图片。
现在,我们可以使用多线程版本来实现,以提高下载速度。我们定义一个函数`download_img(img_url)`,用于下载一个图片。
```python
def download_img(img_url):
# 发送GET请求
response = requests.get(img_url)
# 保存图片
with open(img_url.split('/')[-1], 'wb') as f:
f.write(response.content)
```
然后,我们可以使用多线程来下载所有图片:
```python
url = 'https://www.example.com'
img_urls = get_img_urls(url)
threads = []
for img_url in img_urls:
# 创建线程并启动
t = Thread(target=download_img, args=(img_url,))
t.start()
threads.append(t)
# 等待所有线程结束
for t in threads:
t.join()
```
这个多线程版本会创建多个线程来下载所有图片,从而提高下载速度。
希望这个示例代码可以帮助您实现爬虫,如果有任何问题,请随时提出。
阅读全文