网站:http://zhongguose.com/
目标:爬取所有颜色和颜色的十六进制码
网站简介:记录最具有代表性的中国传统颜色及颜色的十六进制码,方便p图取色参考,里面的颜色都是最具代表的中国色。
首次看一下网站的源码,发现源码里面没有首页的样式,首页里面每一个色块的样式文件里都有记录颜色的名称和十六进制码,而在代码里是通过js方式呈现的,并不是一个纯静态页面,所以,使用常规的resquest爬虫是无法爬取我们想要的信息的。
爬虫工具:selenium、PhantomJS、BeautifulSoup
简介:使用selenium这个工具是因为它可以爬取我们肉眼可见的页面信息,作为静态页面爬取下来。同时它还是一个自动化测试工具,本次爬取不涉及,有兴趣的同学自行百度。
使用selenium需要PhantomJS工具的支持,具体下载使用请参考https://blog.csdn.net/qq_37245397/article/details/81543450
selenium的用法:
下载Phantomjs
Phantomjs路径加入path中
windows:再环境变的path变量加入Phantomjs的安装位置
linux:
nano ~/.bash_profile
##将Phantomjs路径加入path中
export PATH=/Your/Path/to/Phantomjs/bin:$PATH
##保存退出
##生效
source ~/.bash_profile
爬虫过程
使用Phantomjs的webdriver,将页面获取回来,再使用beatuifulsoup库解析,可以得到我们想要的页面内容;
发现这些颜色名称和十六进制码都是规律地写在一个span标签里面,颜色名地标签class值是name里面的style属性里就包含了rgb码;
所以我们只要获取所有class值为name的span标签,获取标签内容,和标签的style属性值,使用split分割出我们想要的部分rgb码就可以了;
将获取到的数据存到字典里,需要下一步的操作时,直接从字典中提取出来即可。
代码如下:
from selenium import webdriver
from bs4 import BeautifulSoup
url = "http://zhongguose.com/"
driver = webdriver.PhantomJS()
driver.get(url)
html = driver.execute_script('return document.documentElement.outerHTML')
soup = BeautifulSoup(html,"html.parser")
colorlist = {}
#循环读取所有span标签
for i in soup.find_all("span",class_="name"):
name = i.string
#提取spna的style值,里面包含颜色的十六进制码
rgb = str(i.get('style')).split(": ")[1]
#将颜色名称和颜色十六进制颜色代码值以字典的形式写进字典,返回字典列表
colorlist[name] = rgb
print(colorlist)