欢迎关注我的博客
python实战之爬取豆瓣一拍上的摄影图片
在学校的时候就断断续续的学习Python3的基础知识,但是总想找一个实际项目练一练手,所以我选择了爬虫,好玩,好用,基础知识差不多也都用得上.
熟悉工具
俗话说的好,工欲善其事必先利其器
写一个爬虫需要一些帮助我们的工具,我们需要使用pip安装一下我们需要的第三方库
1.BeautifulSoup
BeautifulSoup是一个html的解析器,他可以查找html标签中的内容,使用极其方便.
主要使用BeautifulSoup中的findAll方法将我们需要的html中包裹的图片链接提取出来.
2.requests
requests是Python的一个http的第三方库,它可以为我们实现get
,put
,post
,cookie
...等功能,是一个取代Python内置urllib的有力选择.
在Python3的基础上开始工作
首先我们要对前端知识要有一定的了解,我们要会分析网站页面html上的标签的含义,我们找到豆瓣一拍的网页,用f12来查看网页源代码,找到页面链接以及,每个链接打开后的图片链接,当我们取得<a/>
标签和<div/>
的class
类后,我们就可以使用BeautifulSoup来分离出链接地址了,然后使用for
循环依次遍历列表,把网页中的翻页链接链接全部查找完,然后再把每个页面的图片下载下来.
在此处贴上源码:(后续仍会更新,视学习进度而定)
import requests
from urllib.request import urlretrieve
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}
for i in range(1,51):
url = "https://ypy.douban.com/package?page="+str(i)
r = requests.get(url, headers = headers)
bsObj = BeautifulSoup(r.text, "html.parser") #urllib.request不需要加`.text`
imagesSet = bsObj.findAll("a", {"class": "lnk-pic-card"})
for image in imagesSet:
photoUrl = "https://ypy.douban.com"+image["href"]
r1 = requests.get(photoUrl, headers = headers)
bsObj1 = BeautifulSoup(r1.text, "html.parser")
images = bsObj1.findAll("div", {"class": "pic-wrapper"})
for image1 in images:
photoName = image1.img.attrs["data-src"][28:]+".jpg" #创造独一无二的文件名
urlretrieve(image1.img.attrs["data-src"], photoName) #Python自带的保存多媒体文件的方法
print(i) #打印下载的页数信息
网友评论