python爬取百度图片 --re

流程

1.获取百度图片的url

https://image.baidu.com/search/index?tn=baiduimage&word=xxx
  1. 正则
    右键百度图片中的图片元素,找到图片的链接(以.jpg结尾),然后右键源代码中查看是否存在该资源(确保是静态部分)
    根据源码中的图片标签写正则
    源码中图片标签html如下:
"thumbURL":"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1086547525,3479825412&fm=26&gp=0.jpg"

根据该html写正则

"thumbURL":"(.*?)"
  1. 爬虫代码
import requests
from urllib import parse
import time
import random
import re
import os

class BaiduImage(object):
	def __init__(self):
		self.url = 'https://image.baidu.com/search/index?tn=baiduimage&word={}'
		self.headers = {'User-Agent':'Mozilla/5.0'}

	#向一级页面发请求,提取前30张图片的二级页面的链接
	def get_image(self,url,word):
		html = requests.get(url=url,headers=self.headers).text
		#创建编译对象
		p = re.compile('"thumbURL":"(.*?)"',re.S)
		# re匹配,将30张图片的链接放入list
		#findall()返回的数据格式为['xxx.jpg','xxx.jpg']
		link_list = p.findall(html)
		
		#向图片链接发请求,并保存到本地
		self.save_image(link_list,word)

	#保存图片到指定路径的函数
	def save_image(self,link_list,word):
		#定义保存图片的路径名并创建文件夹
		directory = '/home/tarena/images/{}/'.format(word)
		#如果系统中没有该文件夹则创建
		if not os.path.exists(directory):
			os.makedirs(directory)
		
		#发请求,获取链接对应的图片(二进制文件,需用.content)
		for link in link_list:
			html = requests.get(url=link,headers=self.headers).content
			#定义保存的图片的文件名
			filename = directory + link[-10:]
			with open(filename,'wb') as f:
				f.write(html)
			print(filename,'下载成功')

	#入口函数
	def run(self):
		word = input('你想要谁的照片,请输入:')
		#因为输入的可能为中文,需要对查询字符串进行编码
		params = parse.quote(word)
		url = self.url.format(params)
		self.get_image(url,word)
if __name__ == '__main__':
	spider = BaiduImage()
	spider.run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值