一. 写在前面
前端页面的展示通常是是在html文件当中嵌入图片url,爬取图片其实就分为以下几个部分:
S1. 解析html页面获取图片url
S2. 通过图片url将图片保存至本地
下面分别进行讲解。
二. HTML页面解析
HTML的解析主要是使用美味汤BeautifulSoup,关于美味汤的教程可以参考北京理工大学 嵩天老师在中国大学MOOC上的Python爬虫课程。
以下是不是视频课程的截图,就不再码字了,直接看老师的图。
关于第二张图要简单的说一下,爬虫要对HTML文件的基本语法有一定的了解,知道标签的名称和属性的分别。以下就是一个标签的结构图。
有了直观认识之后,放一些常用的命令: 参考文章
1.导入BeautifulSoup库
注意大小写,Python是大小写敏感的语言
from bs4 import BeautifulSoup
2.创建BeautifulSoup对象
#方法一:使用urlopen获取页面
import urllib
html = urllib.request.urlopen("http://www.pythonscraping.com/pages/page3.html")
soup = BeautifulSoup(html)
#方法二:使用requests库获取页面
import requests
from bs4 import BeautifulSoup
url= "https://gkcx.eol.cn/schoolhtm/schoolTemple/school1180.htm"
header = {"Accept":"*/*","Connection":"keep-alive","User-Agent":"Mozilla/5.0"}
html = requests.request('GET',url,headers = header)
soup=BeautifulSoup(html.content)
#方法三:还可以通过本地的html文件形成美味汤
soup = BeautifulSoup(open('index.html'))
3.格式化输出HTML页面的内容
(其实就是把HTML文件的代码格式给搞的标准一些,例如缩进等等)
#python 3
print (soup.prettify())
#输出结果实例如下:
<html>
<head>
<title>
The Dormouse's story
</title>
4. 寻找满足条件的tag
# 查找标签名字为div,且属性满足class=main center的tag
mainCenter = soup.find_all("div",attrs={'class':"main center"})
find_all返回的是<class 'bs4.element.ResultSet'>
,如果存在满足以上条件的多个标签,可以通过像访问数组一样访问各个标签。但是经过个人测试,遗憾的是,嵌套在div标签的子div标签无法被寻找出来。
三. 图片爬取和保存
参考资料:https://blog.youkuaiyun.com/weixin_41931602/article/details/80605229 这位大佬对图片爬取和保存在本地的方法总结的很全
我主要使用的是第一种方法,亲测好用
# -*- coding: utf-8 -*-
import urllib
img_src = 'http://724.169pp.net/bizhi/2017/039/1.jpg'
urllib.urlretrieve(img_src,r'C:\\Users\\ME\\Desktop\\Python project\\pachong\\scrapy\\secondDemo\\photo\\1.jpg')