对斗图网站上表情图片进行爬取
首先打开要爬取的表情包网站 对网站的URL进行分析
这是一个get请求 问号 后面的page是参数 因此这是第一页的内容
我先对单个图片进行下载 操作
首页获取图片的url 鼠标放在要下载的图片上 右键---------》点击复制图片连接
将图片链接 给一个变量 url来接收 然后 用request库下的urlretrieve函数(要传两个参数 第一个是要解析的url ,第二个是 给下载的文件取一个文件名 )进行解析下载 。这时后点击RUN 这张图片就在当前目录下载好了
from urllib import request
import requests
url = "http://ww3.sinaimg.cn/bmiddle/9150e4e5gy1g4qhetovzsg206j06j3yv.gif"
request.urlretrieve(url,‘index.png’)
我想让这张图片下载的时候可以 指定目录 而且我要一次下载多个文件时 名字也不能重复
首先指定目录就要使用os模块 给图片分配不同的名字 我使用图片URL后面自带的名字 这需要将Url的字符串进行分割
我首先将url的字符进行分割处理
使用split函数以 / 进行字符串的分割 分割以后 使用pop函数 将数组中最后一位取出来 如下:
>>> url = "http://ww3.sinaimg.cn/bmiddle/9150e4e5gy1g4qhetovzsg206j06j3yv.gif"
>>> split_list = url.split('/')
>>> print(split_list)
['http:', '', 'ww3.sinaimg.cn', 'bmiddle', '9150e4e5gy1g4qhetovzsg206j06j3yv.gif']
>>> split_list.pop()
>>>'9150e4e5gy1g4qhetovzsg206j06j3yv.gif'
上述代码的实现如下:
url = "http://ww3.sinaimg.cn/bmiddle/9150e4e5gy1g4qhetovzsg206j06j3yv.gif"
split_list = url.split('/')
filename = split_list.pop()
request.urlretrieve(url,filename)
使用os.path 可以指定文件下载的路径 (第一个参数是文件夹的名称,第二个参数的文件名称)
这样就完成了 使用爬虫 下载文件 指定路径 分配文件名的简单操作
from urllib import request
import requests
import os
url = "http://ww3.sinaimg.cn/bmiddle/9150e4e5gy1g4qhetovzsg206j06j3yv.gif"
split_list = url.split('/')
filename = split_list.pop()
path = os.path.join('index',filename)
request.urlretrieve(url,filename = filename)
如何下载当前页面所有的图片
首先 要先找到当前页面所有的图片路径
将page1的内容 封装成一个get请求发送 使用变量res进行接收 将获取响应的内容给content变量来接收
由于它会返回大量的对我们无用的信息 而我有只需要 图片的rul 所以现在要对返回的数据 进行过滤
使用BeautifulSoup解析源代码 我们要对 返回数据进行解析 所以第一个参数要传入content 第二个参数传入lxml
这样过滤以后就只剩下 img标签了 通过img标签 我们可以将需要的文件url取出来 就像字典取值 一样 将class对应的img-responsive lazy image_dta 然后用img_list来接收
from bs4 import BeautifulSoup
res = requests.get('http://www.doutula.com/photo/list/?page=1')
content = res.text
Soup = BeautifulSoup(content,'lxml')
img_list = Soup.find_all('img',attrs={'class':'img-responsive lazy image_dta'})
for img in img_list:
print(img['data-original'])
把当前页面所有的图片连接全部拿到后 只需要和前面写的下载单个图片的方法关联起来就可以了
把单个下载图片的代码封装成一个函数并传入一个参数 与获取全部链接的代码相关联
from urllib import request
import requests
from bs4 import BeautifulSoup
import os
def download(url):
#把图片下载下来
#指定图片下载路径
#给图片分配名字
split_list = url.split('/')
filename = split_list.pop()
path = os.path.join('index',filename)
request.urlretrieve(url,filename = path)
'''获取当前页面所有的图片连接'''
res = requests.get('http://www.doutula.com/photo/list/?page=1')
content = res.text
Soup = BeautifulSoup(content,'lxml')
img_list = Soup.find_all('img',attrs={'class':'img-responsive lazy image_dta'})
for img in img_list:
url = img['data-original']
download(url)