公司头条

推广运维推广运维
关注: 0贴子:13 排名: 7 
0 回复贴,23 次查看
<返回列表

python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2018-11-6 14:13:03
甚么是网络爬虫?

网络爬虫也叫网络蜘蛛(spider),它的官方定义可以去百科查,这里我们只通俗的说甚么是网络爬虫,可能不准确,然则相对更好理解,还是举例说明。
有时候,你可能从某个网页上看到一段信息,觉得异常切合口味,于是着手把它存下来了。这个读取并且存储数据的历程,和一次网络爬虫爬取是类似的。百度,谷歌等搜索引擎,相信大家都用过,它是怎样实现搜索功能的呢?
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
其实全靠爬虫。他们的网络爬虫不停的爬取互联网的信息并且把认为有用的存下来,当用户输入要害词搜索时,百度谷歌把要害词和自己的数据库匹配,把最相关的网页展示给用户,这样就完成了一次搜索。
  我们再设想一个场景:有一天,你可能看到某个网站上很多信息都很好,一个一个网页的打开并且存储真是麻烦死了。那末这个时候就能够借助网络爬虫,甚至把整个网站的信息都爬取下来。这也是爬虫的一个用途。
python实战项目

经过上面的解释,可以知道,网络爬虫的行为和我们使用浏览器的行为很像。那末,这里介绍的python网络爬虫其实就是模拟浏览器的。
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
上图是一组图片,如果我们想把这些图片都保存下来,一张一张的保存实在太费事了。好像有迅雷可以下载悉数链接,然则它会把不该下载的也下载下来,比如红框圈中的那个怪男。
右键,查看网页源代码:
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
获得很多很多字符,我们只体贴图片链接,打开上图红框圈中的链接,获得图片以下:
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
显然图片的链接在网页的源代码中,那末怎样写这个python实战项目,网络爬虫呢?
python实战项目,网络爬虫

1. 首先获得网页的源代码

实际上就是模拟浏览器请求那个图片网页的网址。不多说,直接看源码,很简单
#coding:utf-8import requests# url 即为图片网页的网址url = "http://image.百度.com/search/index?tn=百度image&【...】"data = requests.get(url)print data.content运行后,会发现适才我们在浏览器查看的源代码被打印出来了。
2. python项目实战,提掏出图片链接

怎样从一大堆字符里提掏出要害的美女图片链接呢?谜底是使用正则表达式,关于正则表达式,可以参考:
python基础,甚么是正则表达式,正则表达式的使用

使用正则表达式的第一步是找出链接的纪律,它在哪些位置泛起。这里粗略的试一下:
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
注意到链接是存在 &#8220;objURL&#8221;: 和逗号(,) 之间的,那末我们的实战项目,python网络爬虫的正则表达式代码可以以下写:
#coding:utf-8import requests# url 即为图片网页的网址url = "http://image.百度.com/search/index?tn=百度image&【...】"data = requests.get(url)#print data.content# 正则表达式的使用,可参照上一节pattern = re.compile(r'.*?"objURL":"(.*?)",', re.S)result = pattern.findall(data.content)for item in result:    print item运行实战项目的 python 网络爬虫剧本,发现我们成功了,获得了一系列的图片地址:
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
3. python实战项目,下载图片

获得了图片的链接后,我们怎样把它们存下来呢?谜底就是,再模拟浏览器接见一次图片链接,然后把获得的数据写到文件即可。我们直接上代码:
#coding:utf-8import requests# url 即为图片网页的网址url = "http://image.百度.com/search/index?tn=百度image&【...】"data = requests.get(url)#print data.content# 正则表达式的使用,可参照上一节pattern = re.compile(r'.*?"objURL":"(.*?)",', re.S)result = pattern.findall(data.content)for item in result:    try:        pic = requests.get(item, timeout=2)        fp = open("pic/%d.jpg"%i, "w+")        fp.write(pic.content)        fp.close()        i = i + 1    except Exception, e:        pass在执行代码前,先建立一个文件夹 pic 用来存图片,然后执行实战项目python剧本,获得
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
成功了!
4. python实战项目,挑选图片

可以看到,虽然图片被爬取下来了,但并非完美的,因为怪男也被下载下来了。怎样挑选呢?实际上,可以参考我们前面的博客:
python实战小项目,人脸检测,让电脑对你的颜值打分

我们只下载 female(女),颜值大于 55 分的,代码以下:

#coding:utf-8import requestsimport urllib2import randomimport time, reimport base64import urllib, jsonfrom token import GetTokenfaceDetectUrl = "http://aip.百度bce.com/rest/2.0/face/v1/detect"# 凭据人脸检测的颜值打分,判断是不是下载def IfDownLoad(pic, token):    img = base64.b64encode(pic)    params = {"face_fields":"age,beauty,expression,faceshape,gender,glasses,landmark,race,qualities","image":img,"max_face_num":5}    params = urllib.urlencode(params)    request_url = faceDetectUrl + "?access_token=" + token    request = urllib2.Request(url=request_url, data=params)    request.add_header('Content-Type', 'application/x-www-form-urlencoded')    response = urllib2.urlopen(request)    content = response.read()    if content:        js = json.loads(content)        for item in js['result']:            print "age: %d, beauty: %d" % (item['age'], item['beauty'])            if 0 == cmp('female', item['gender']):                if (item['age']55):      # 只下载女孩,年龄小于 29,颜值大于 55分                    return True    return Falsedef DownLoad(url, i):    fp = open("pic/%d.jpg"%i, "w+")    fp.write(pic.content)    fp.close()if __name__ == "__main__":    # 获得网页源代码    url = "http://image.百度.com/search/index?tn=百度image&【...】"    data = requests.get(url)    # print data.content    # 获得链接并判断是不是下载    pattern = re.compile(r'.*?"objURL":"(.*?)",', re.S)    result = pattern.findall(data.content)    i = 0    token = GetToken()    for item in result:        print item        try:            pic = requests.get(item, timeout=2)            if(True == IfDownLoad(pic.content, token)):                DownLoad(pic.content, i)                i = i + 1        except Exception, e:            pass运行实战项目python剧本,获得结果以下:
python实战项目,建造网络爬虫爬取百度美女图片,人工智能挑选颜值高的保存 ...
可以看出,怪男被剔除,下载的基本都是颜值较高的美女图片,这样我们就完成了实战项目,python 人工智能爬虫 &#8212; 选择性的爬取图片。
回复

使用道具 举报

快速回帖 使用高级回帖 (可批量传图、还有插入视频等功能哦!)

您需要登录后才可以回帖 登录 | 立即注册

  • 发布信息免费
  • 发贴彩色标题
  • 签到额外经验值

如何快速提升等级,查看[积分规则]

活动中心

查看更多>>
最新热版
会员排行
©2001-2018 公司头条 https://www.ewxf.com中国互联网举报中心沪ICP备14046342号-13 本站内容均来自网络转载或网友提供,如有侵权请及时联系我们,Cxy@izhiben.CN 公安网备|网站地图 企业map 产品map 新闻map 其他map
Archiver手机版小黑屋广告合作QQ:864633495
发帖 客服 微信 手机版 举报