网页爬虫抓取百度图片(什么是网络爬虫?向日葵智能实战小项目)

优采云 发布时间: 2021-11-07 08:00

  网页爬虫抓取百度图片(什么是网络爬虫?向日葵智能实战小项目)

  原帖:向日葵智能

  现在基于python的爬虫实战项目,网上资料还是很多的,但是本节介绍的爬虫略有不同:同样是下载某个网页的漂亮图片,不同的是我们使用人工智能过滤掉漂亮的。. 慢慢说爬虫吧。过滤的原理很简单。参考python实战项目,人脸检测,让电脑给你的外表打分。

  什么是网络爬虫?

  网络爬虫也称为网络蜘蛛。它的官方定义可以在百科全书中找到。这里我们只说什么是网络爬虫,可能不准确,但相对来说比较好理解,举个例子吧。

  有时,您可能会从某个网页上看到一条信息,并觉得它符合您的口味,因此您将其保存。这种读取和存储数据的过程类似于网络爬虫。百度、谷歌等搜索引擎,相信大家都用过,他们是怎么实现搜索功能的?

  

  事实上,这一切都取决于爬虫。他们的网络爬虫不断地爬取互联网上的信息,并保存他们认为有用的信息。当用户输入关键词进行搜索时,百度谷歌将关键词与自己的数据库进行匹配,匹配最相关的网页展示给用户,从而完成一次搜索。

  再设想一个场景:有一天,你可能会看到某个网站的很多信息非常好,一个个打开和存储网页真的很麻烦。那么这时候就可以使用网络爬虫爬下整个网站的信息了。这也是爬虫的一个目的。

  Python实战项目

  经过上面的解释,我们可以知道网络爬虫的行为和我们浏览器的行为非常相似。所以,这里介绍的python网络爬虫其实就是模拟一个浏览器。

  

  上图是一组图片。如果我们要保存这些图片,要一一保存就太麻烦了。貌似迅雷可以下载所有的链接,但它也会下载不该下载的,比如红框里的怪人。

  右键查看网页源码:

  

  我们得到的字符很多,我们只关心图片链接,打开上图红框中的链接,得到的图片如下:

  

  明明图片的链接在网页的源码里,那么这个python实战项目,网络爬虫怎么写呢?

  Python实战项目,网络爬虫1. 先获取网页源码

  其实就是模拟浏览器请求图片页面的URL。话不多说,看源码,很简单

  #coding:utf-8

import requests

# url 即为图片网页的网址

url = "https://image.baidu.com/search/index?tn=baiduimage&【...】"

data = requests.get(url)

print data.content

  Python

  复制

  运行后会发现我们刚才在浏览器中查看的源代码已经打印出来了。

  2. Python项目实战,提取图片链接

  如何从大量字符中提取关键美女图片链接?答案是使用正则表达式。关于正则表达式,可以参考:

  Python基础,什么是正则表达式,正则表达式的使用

  使用正则表达式的第一步是找出链接的模式及其出现的位置。这是一个粗略的尝试:

  

  注意"objURL":和逗号(,)之间存在链接,那么我们的实战项目,python网络爬虫的正则表达式代码可以这样写:

  #coding:utf-8

import requests

# url 即为图片网页的网址

url = "https://image.baidu.com/search/index?tn=baiduimage&【...】"

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-8

import requests

# url 即为图片网页的网址

url = "https://image.baidu.com/search/index?tn=baiduimage&【...】"

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

  Python

  复制

  执行代码前,创建一个文件夹pic存放图片,然后执行实战项目python脚本得到

  

  这是一个成功!

  4. Python实战项目,过滤图片

  可以看到,虽然图片被爬下来了,但并不完美,因为怪人也被下载了。如何过滤?其实可以参考我们之前的博客:

  Python实战小项目,人脸检测,让电脑给你的颜值打分。我们只下载女(女),颜值大于55分,代码如下:

  #coding:utf-8

import requests

import urllib2

import random

import time, re

import base64

import urllib, json

from token import GetToken

faceDetectUrl = "https://aip.baidubce.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 False

def DownLoad(url, i):

fp = open("pic/%d.jpg"%i, "w+")

fp.write(pic.content)

fp.close()

if __name__ == "__main__":

# 获取网页源代码

url = "https://image.baidu.com/search/index?tn=baiduimage&【...】"

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人工智能爬虫-图片的选择性爬取。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线