It has been 759 days since the last update, the content of the article may be outdated.
引言
在项目 给你点颜色瞧瞧|GUSCSS
的 不问色号 模块中,需要收集口红的颜色,本文以西集网烈焰蓝金系列唇膏为例,演示如何通过简单的爬虫获取图片,之后使用 OCR 技术对图片文字进行识别,同时获取图片特征颜色部分作为口红的 RGB 色值。
使用 urllib.request 获取网页
Code
import urllib.request |
返回结果
Code
File "/usr/local/lib/python3.7/urllib/request.py", line 649, in http_error_default |
公共厕所咩·电影《疯狂的石头》
这么写,一般网站是不会让你看的。因为正常的用户访问会带浏览器的请求头,而我们用程序访问时没有请求头,网站知道我们是“垃圾请求”,只会白白消耗流量,所以拒绝为我们这样的请求服务。
遇到 403 怎么办
为了获取到数据,我们要将程序伪装成“正经人”,告诉网站:我来给你们送钱了,让我进去康康吧?
headers 作用(穿上燕尾服再去参加)·电影《赌侠》
于是,我们戴上headers
的装扮,门口保安一看:这位没问题,进来吧。程序就顺利地进去了。
python
from urllib.request import urlopen,Request |
读取到的内容与我们鼠标右键读取网页源码所获取到的数据实质是一样的。
利用 lxml 使用 xPath 解析网页
获取到网站源码之后,我们使用 xpath 规则对目标元素进行提取。
xPath 提取页面目标元素
依次获取到页面中该系列链接、编号、名称,之后对图片进行提取并保存到本地。
python
from lxml import etree |
注意:
如果遇到报错lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: link line 14 and head, line 15, column 182
是因为网页中 html 语法不规范,如本例中的<link rel="stylesheet" href="https://img0.xiji.com/themes/ecstore/images/styles_ex.css?d2019110801">
应该是自闭标签。
我们可以添加解析器:
python
parser = etree.HTMLParser(encoding='utf-8') |
爬取到的图片数据如下:
数据处理
获取数据完成,下一步,我们需要对图片进行分析,借助Pillow
识别口红色号的 RGB 色值,使用 百度 OCR 接口 识别图片下方的推荐词作为单个色号的描述。具体实现参考源码
最后返回的的处理结果如下:
Code
[{'id': '127266', 'name': '#520', |