今天来爬取一下网站图片,用的是requests方法
首先,我们还是导入我们这次所需要的模块
import os.path
import requests
import json
import re
#爬取图片
def page():
#content(二进制)返回二进制图片数据
#text()字符串
#json()对象
url = '*******************'
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/102.0.5005.124 Safari/537.36 '
'Edg/102.0.1245.41'
}
pag = requests.get(url=url,headers=headers).content
with open('./baidubaike2.jpg','wb') as fp:
fp.write(pag)
其中url就是你想要获取数据的网址,User-Agent是对爬虫进行伪装,模拟浏览器发请求。
用requests发送一个get请求,content就是返回二进制形式
然后把数据以二进制形式保存到文件中去。
#创建一个文件夹
if not os.path.exists('./baidubaike_libs'):
os.mkdir('./baidubaike_libs')
之后创建一个文件夹,用来保存我们之后获取到的照片
由于这个网站是一个动态加载数据的,采用的是AJAX
(AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。)
不需要更换网址,所以我们要用json来获取目前未加载的数据。
datalist = []
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/102.0.5005.124 Safari/537.36 '
'Edg/102.0.1245.41'
}
baseurl = '****************************'
同样,定义一个列表用来保存数据,指定基础的url,进行UA伪装。
用于是json格式,采用异步爬取,所以我们这里的url不是网址,而是浏览器请求的url
for n in range(5,6):
url = baseurl+str(n)+'&keyWord='
params = {
'count': '8',
'page': str(n),
'keyWord': ''
}
response = requests.get(url=url, params=params, headers=headers)
list_data = response.json()
datalist.append(list_data)
#print(datalist)
result = open('baidubaike.json','r',encoding='utf-8')
同样的方法发送一个get请求,不同的是这里携带了参数(params)。我们通过对page的value值进行更改从而能够换页爬取数据
最后保存到json文件中。
ex = r'"pic": "(.*?)"'
img_src_list = re.findall(ex,str(result.readlines()),re.S)
通过正则表达式进行json文件数据的提取
for src in img_src_list:
#请求到了图片的二进制数据
img_data = requests.get(url=src,headers=headers).content
#生成图片名称
img_name1= src.split('/')[-3]
img_name2 = img_name1.split('?')[0]
img_path = './baidubaike_libs/'+img_name2+'.jpg'
用一个循环来获取图片数据,以jpg格式存储
with open(img_path,'wb') as fp:
fp.write(img_data)
print(img_name2,'.jpg下载成功!')
最后把数据保存到文件中。
注意:本项目代码仅作为学习交流使用!