python 爬虫获取图片(一):简单爬取

以下代码大部分都是吸取b站UP主:大大的小番茄
经过自己的总结和理解,希望能帮助到大家,大家也可以看看老师的课
老师个人主页

开始

在这里插入图片描述
准备工作:
1)我们需要知道每张图片都是一个链接,我们则需要进行获取
2)我们需要对python进行伪装
举例

import requests

url = 'https://www.douban.com/'

response = requests.get(url)

print(response)#返回结果为418,200为请求成功,418则是对方发现咱们是爬虫了


所以我们要对其进行伪装
3)找到网站图片的相似处(才能更好的进行爬取)(一般说ojbURL和URL)

正式开始

在这里插入图片描述这里我使用的是谷歌浏览器,大家可自行下载(或其他浏览器也行)

步骤:
1)右键检查
2)点击network(如没内容,再次刷新网站)(我们发送给网站的信息)
3)拖到第一开始处
4)在其中找到Cookie(可选)和User-Agent
#Cookie为登录信息,User-Agent为浏览器信息等等
在这里插入图片描述

还有怎么找到图片的相似处呢

步骤:
1)右键查看源代码
2)CTRL+F
3)可通过查看图片的属性来进行查找(一般为objURL或URL)
在这里插入图片描述来进行查找

完整代码进行解析

import re,requests,time#导入所需要的库

headers = {
	"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Mobile Safari/537.36",
	"Cookie":"BAIDUID=229A18B7534A5CEA671381D45FCDC530:FG=1; BIDUPSID=229A18B7534A5CEA671381D45FCDC530; PSTM=1592693385; BDRCVFR[dG2JNJb_ajR]=mk3SLVN4HKm; userFrom=null; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; H_WISE_SIDS=149389_148867_148211_149537_146732_138426_150175_147527_145599_148186_147715_149253_150045_149280_145607_148660_146055_110085; delPer=0; BDORZ=AE84CDB3A529C0F8A2B9DCDD1D18B695; ysm=10315; IMG_WH=626_611; __bsi=8556698095607456048_00_14_R_R_17_0303_c02f_Y",	
}

detail_urls = []#存储图片地址

for i in range(1,400,20):#20页一张
	url = 'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=&st=-1&fm=result&fr=&sf=1&fmq=1592804203005_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1592804203008%5E00_1328X727&sid=&word=%E5%BE%B7%E9%B2%81%E7%BA%B3&pn={}'.format(i)#请求的地址
	response = requests.get(url,headers,timeout = (3,7))#设置请求超时时间3-7秒
	content = response.content.decode('utf-8')#使用utf-8进行解码
	detail_url = re.findall('"objURL":"(.*?)"',content,re.DOTALL)#re.DOTALL忽略格式#匹配objURL的内容,大部分为objURL或URL
	detail_urls.append(detail_url)#将获取到的图片地址保存在之前定义的列表中
	response = requests.get(url,headers=headers)#请求网站
	content = response.content
b = 0#图片第几张
for page in detail_urls:
	for url in page:
		try:
			print('获取到{}张图片'.format(i))
			response = requests.get(url,headers = headers)
			content = response.content
			if url[-3:] == 'jpg':
				with open('保存的地址{}.jpg'.format(b),'wb') as f:
				f.write(content)
			elif url[-4:] == 'jpeg':
				with open('保存的地址{}.jpeg'.format(b),'wb') as f:
				f.write(content)
			elif url[-3:] == 'png':
				with open('保存的地址{}.pon'.format(b),'wb') as f:
				f.write(content)
			else:
				continue
				
		except:
			print('超时')
		b +=1

结果图

在这里插入图片描述知道代码还有许多问题,比如超时等~ 可以允许防火墙通过python什么的
或者网卡,代码也会再后面继续完善的

谢谢大家

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LJHandCXY/article/details/106974982