Python爬虫爬取指定网页图片

今天来爬取一下网站图片,用的是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值进行更改从而能够换页爬取数据

Python爬虫爬取指定网页图片_第1张图片

最后保存到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下载成功!')

最后把数据保存到文件中。

效果展示:

Python爬虫爬取指定网页图片_第2张图片

注意:本项目代码仅作为学习交流使用!

你可能感兴趣的:(爬虫,python,开发语言,json)