python爬虫爬取百度图片_Python爬虫爬取百度图片

前期准备:一个所爬人物的名单txt,只要人名,一行一个。

代码流程:读取上述名单,遍历每一个人名,爬取30张关于他的百度图片,保存在以他名字命名的文件夹中。

ps:默认情况下,网址的一页是60张图,如何翻页呢?注意到所爬网址的最后是pn=60,只要每次加60就会到新的一页,比如pn=120,pn=180等。

#!/usr/bin/env python

# encoding: utf-8

import urllib2

import re

import os

import sys

reload(sys)

sys.setdefaultencoding("utf-8")

def img_spider(name_file):

user_agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"

headers = {'User-Agent':user_agent}

#读取名单txt,生成包括所有人的名单列表

with open(name_file) as f:

name_list = [name.rstrip().decode('utf-8') for name in f.readlines()]

f.close()

#遍历每一个人,爬取30张关于他的图,保存在以他名字命名的文件夹中

for name in name_list:

#生成文件夹(如果不存在的话)

if not os.path.exists('E:/celebrity/img_data/' + name):

os.makedirs('E:/celebrity/img_data/' + name)

try:

#有些外国人名字中间是空格,要把它替换成%20,不然访问页面会出错。

url = "http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word=" + name.replace(' ','%20') + "&cg=girl&rn=60&pn=60"

req = urllib2.Request(url, headers=headers)

res = urllib2.urlopen(req)

page = res.read()

#print page

#因为JSON的原因,在浏览器页面按F12看到的,和你打印出来的页面内容是不一样的,所以匹配的是objURL这个东西,对比一下页面里别的某某URL,那个能访问就用那个

img_srcs = re.findall('"objURL":"(.*?)"', page, re.S)

print name,len(img_srcs)

except:

#如果访问失败,就跳到下一个继续执行代码,而不终止程序

print name," error:"

continue

j = 1

src_txt = ''

#访问上述得到的图片路径,保存到本地

for src in img_srcs:

with open('E:/celebrity/img_data/' + name + '/' + str(j)+'.jpg','wb') as p:

try:

print "downloading No.%d"%j

req = urllib2.Request(src, headers=headers)

#设置一个urlopen的超时,如果3秒访问不到,就跳到下一个地址,防止程序卡在一个地方。

img = urllib2.urlopen(src,timeout=3)

p.write(img.read())

except:

print "No.%d error:"%j

p.close()

continue

p.close()

src_txt = src_txt + src + '\n'

if j==30:

break

j = j+1

#保存30个图片的src路径为txt,我要一行一个,所以加换行符

with open('E:/celebrity/img_data/' + name + '/' + name +'.txt','wb') as p2:

p2.write(src_txt)

p2.close()

print "save %s txt done"%name

#主程序,读txt文件开始爬

if __name__ == '__main__':

name_file = "name_lists1.txt"

img_spider(name_file)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值