Python爬虫之网页图片抓取的方法
在Python爬虫中,网页图片的抓取是一项基本任务。下面介绍网页图片抓取的方法和实例。
1. 查找图片链接
在抓取图片前,需要先找到图片对应的链接。可以通过BeautifulSoup库和正则表达式进行图片链接的查找。
1.1 使用BeautifulSoup库查找图片链接
使用BeautifulSoup库可以方便地在网页中查找图片链接。下面是一个例子:
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = "https://example.com"
html = urlopen(url)
soup = BeautifulSoup(html, "html.parser")
img_links = []
for img in soup.findAll("img"):
link = img.get("src")
if link:
if "http" in link:
img_links.append(link)
else:
img_links.append(url + link)
print(img_links)
以上代码首先使用urlopen函数打开网页,然后使用BeautifulSoup库将网页内容转化为soup对象。接下来在soup对象中查找所有img标签,获取其中的src属性值,并将其添加到img_links列表中。
1.2 使用正则表达式查找图片链接
如果不能使用BeautifulSoup库,那么可以使用正则表达式进行图片链接的查找。下面是一个例子:
from urllib.request import urlopen
import re
url = "https://example.com"
html = urlopen(url)
img_links = re.findall('<img src="(.+?)"', html.read().decode())
img_links = [url + link if "http" not in link else link for link in img_links]
print(img_links)
以上代码首先使用urlopen函数打开网页,然后使用正则表达式查找img标签中的src属性值,并添加到img_links列表中。注意需要对非完整链接进行额外处理。
2. 下载图片
在获取到图片链接后,就可以使用Python下载图片。可以使用requests库或者urllib库进行图片的下载。
2.1 使用requests库下载图片
使用requests库可以方便地下载图片。下面是一个例子:
import requests
url = "https://example.com/image.jpg"
r = requests.get(url)
with open("image.jpg", "wb") as f:
f.write(r.content)
以上代码首先使用requests库的get函数获取图片的二进制数据,然后使用with语句将二进制数据保存到文件中。
2.2 使用urllib库下载图片
使用urllib库可以通过urlretrieve函数下载图片。下面是一个例子:
from urllib.request import urlretrieve
url = "https://example.com/image.jpg"
urlretrieve(url, "image.jpg")
以上代码使用urlretrieve函数下载图片,并使用指定的文件名进行保存。
示例说明
现在有一个需要下载图片的网页,网页地址为 https://www.baidu.com/
。我们想要下载该网页中所有的图片,并将其保存到本地。
使用BeautifulSoup库和requests库可以实现该功能。完整代码如下:
from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests
url = "https://www.baidu.com/"
html = urlopen(url)
soup = BeautifulSoup(html, "html.parser")
img_links = []
for img in soup.findAll("img"):
link = img.get("src")
if link:
if "http" in link:
img_links.append(link)
else:
img_links.append(url + link)
for link in img_links:
r = requests.get(link)
with open(link.split("/")[-1], "wb") as f:
f.write(r.content)
以上代码首先使用urlopen函数打开网页,然后使用BeautifulSoup库将网页内容转化为soup对象。接下来在soup对象中查找所有img标签,获取其中的src属性值,并将其添加到img_links列表中。最后使用requests库下载图片,并使用图片文件名进行保存。
使用正则表达式和urlretrieve函数可以实现该功能。完整代码如下:
from urllib.request import urlopen, urlretrieve
import re
url = "https://www.baidu.com/"
html = urlopen(url)
img_links = re.findall('<img src="(.+?)"', html.read().decode())
img_links = [url + link if "http" not in link else link for link in img_links]
for link in img_links:
urlretrieve(link, link.split("/")[-1])
以上代码首先使用urlopen函数打开网页,然后使用正则表达式查找img标签中的src属性值,并添加到img_links列表中。最后使用urlretrieve函数下载图片,并使用图片文件名进行保存。
以上两个例子分别使用了不同的方式查找图片链接和下载图片,但其思路基本相同。在实际应用中,可以根据需要选择适当的方式进行编写。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫之网页图片抓取的方法 - Python技术站