目录
下面是一个简单的Python爬虫教程,用于爬取豆瓣网页上的图片并下载。这个教程将使用Python的`requests`库来发送网络请求,以及`BeautifulSoup`库来解析HTML页面。请确保你已经安装了这些库,如果没有,可以使用`pip`来安装:
pip install requests beautifulsoup4
1. 导入必要的库
import requests
import urllib3
from bs4 import BeautifulSoup
import re
2. 定义下载图片的函数
def download_image(image_url, folder):
# 发送GET请求,获取图片内容
response = requests.get(image_url)
if response.status_code == 200:
# 以二进制方式打开文件
with open(folder + '/' + image_url.split('/')[-1], 'wb') as file:
file.write(response.content)
print(f"图片已下载:{image_url}")
else:
print(f"图片下载失败:{image_url}")
3. 定义爬取豆瓣页面图片的函数
def scrape_douban_images(url):
# 发送GET请求,获取页面内容
response = requests.get(url)
if response.status_code == 200:
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有的图片标签
images = soup.find_all('img')
# 创建存储图片的文件夹
if not os.path.exists('douban_images'):
os.makedirs('douban_images')
# 遍历所有图片标签
for image in images:
# 获取图片的URL
image_url = image.get('src')
if image_url:
# 下载图片
download_image(image_url, 'douban_images')
else:
print(f"页面请求失败:{url}")
4. 使用函数爬取图片
# 豆瓣页面的URL
douban_url = 'https://www.douban.com/some_page' # 请替换为实际的豆瓣页面URL
# 爬取并下载图片
scrape_douban_images(douban_url)
注意事项:
1. 遵守法律和网站规定:在爬取网站数据时,请确保遵守相关法律法规和网站的爬虫政策。不要对网站造成过大压力,合理设置请求间隔。
2. User-Agent:有些网站会检查请求的User-Agent,如果没有合适的User-Agent,请求可能会被拒绝。可以在`requests.get`中添加headers参数来设置User-Agent。
3. 异常处理:在实际使用中,你可能需要添加更多的异常处理逻辑,比如处理网络请求失败、解析错误等情况。
4. 图片URL:豆瓣的图片URL可能包含防盗链机制,直接访问图片URL可能无法下载图片。这种情况下,你可能需要模拟浏览器行为,或者寻找其他方法来获取图片。
这个教程提供了一个基本的框架,你可以根据具体的需求进行调整和扩展。
示例(与教程内的不一致,可以复制直接运行)
import requests
import urllib3
from bs4 import BeautifulSoup
import re
http=urllib3.PoolManager()
url = 'https://www.douban.com/'
response=http.request('GET', url)
response=response.data.decode('utf-8')
print(response)
soup=BeautifulSoup(response,'lxml')
text2=soup.find_all('img')
text3=soup.find_all('div', class_='market-spu-pic')
data=[]
for i in text2:
j=str(i)
plink=re.compile(r'<img.*src="(.*?)"')
dlink=re.findall(plink,j)
data.append(dlink)
for i in text3:
j=str(i)
j=j.replace('(',' ')
j=j.replace(')', ' ')
slink = re.compile(r'<div class="market-spu-pic" style="background-image: url(.*?)">')
qlink = re.findall(slink, j)
data.append(qlink)
print(data)
n=0
for i in data:
if i==['https://img1.doubanio.com/f/vendors/a1fdee122b95748d81cee426d717c05b5174fe96/pics/blank.gif'] or i==['/pics/new_menu.gif']:
del i
continue
for j in i:
img_data=requests.get(j).content
path=str(n)+'.jpg'
with open(path, 'wb') as f:
f.write(img_data)
n+=1