《0基础》学习Python——第二十二讲__爬取图片/<4>

一、爬取豆瓣电影的图片封面

        1、经过上节课我们所爬取的豆瓣电影的电影名、年份、国家、导演、主演、剧情,那么接下来我们将学习如何去爬取这些电影的图片,并将这些图片存放在文件夹中。

        2、过程实现:

        2.1、获取网页源码

        首先还是和爬取电影名一样,先从网页获取到URL、然后再发送get请求、进行UA伪装,此处的代码如下:

if __name__ == '__main__':
    # UA伪装
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
    }
    # 获取url
    url = 'https://movie.douban.com/top250'

    # 发送请求
    response = requests.get(url, headers=head)
    # 返回数据类型
    cont_text = response.text
    print(cont_text)#打印数据,用于查看是否爬取成功

       此时有打印结果说明获取网页信息成功,接下来继续对这段长数据进行处理

注意:部分网页需要登录账号才能爬取,此时需要在URL那一栏找到Cookie

       

        复制这段Cookie所对应的内容,将它增加到head里面去,如下列代码

# UA伪装
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
        ,'Cookie':"ll="118183"; bid=H3WRaEnQCkI; _pk_id.100001.4cf6=5df013865257fa4c.1721368722.; __yadk_uid=rm8FHEGxJVSUzh7rJTZUbbphUwvgHrjb; _pk_ref.100001.4cf6=%5B%22%22%2C%22%22%2C1721535985%2C%22https%3A%2F%2Fcn.bing.com%2F%22%5D; __utma=30149280.1409929673.1721368655.1721448364.1721535985.8; __utmc=30149280; __utma=223695111.1684481215.1721368722.1721448364.1721535985.5; __utmc=223695111"
    }

Cookie:用于记录用户的个人偏好和行为,例如登录信息、购物车内容、网站语言等。它们还可以用于跟踪用户的浏览行为和收集统计信息,以便网站可以优化用户体验和提供相关的广告。此为用户私密信息,不要随意传播

        
        2.2、找到图片所对应的标签位置

        2.2.1、定位所需内容所处标签位置

        用以下代码直接定位到 li 标签位置,并获取所有的 li 标签信息

cont_text = response.text
    # print(cont_text)#打印数据,用于查看是否爬取成功
    #对得到的数据进行解析
    tree=etree.HTML(cont_text)
    # print(tree)
    #获取所有的li标签
    lis_li=tree.xpath("//ol[@class='grid_view']/li")
    # print(lis_li)

其打印结果为element对象:

        2.2.2、获取图片的URL:
    for li in lis_li:
        #对单个li标签进行xpath处理
        #xpath返回列表,用join去除列表
        img_url="".join(li.xpath('./div/div[1]/a/img/@src'))
        print(img_url)

即获取所有li标签,然后再通过xpath获取到图片的URL:

其打印结果为:

2.3、通过图片URL获取图片的二进制数据

有了图片的URL即可再通过get请求得到图片的二进制数据,因为图片是以二进制数据的类型存放,代码如下

img_url="".join(li.xpath('./div/div[1]/a/img/@src'))
        # print(img_url)
        #发送get请求
        img_response=requests.get(img_url,headers=head)
        #获取图片的二进制数据
        img_con=img_response.content#此处img_response.content没有用text是因为图片数据是二进制
        print(img_con)

其打印结果为二进制数据:

2.4、存放图片到文件夹

        将获取的图片信息分别写入文件,存放在文件夹中,将图片名后缀名改为JPG格式即可完成图片的爬取

2.4.1  导入一个库用来创建文件夹来存放图片
import os.path

其创建方式为:

import os.path

os.mkdir('./film_pic') #此处为在当前代码同级目录下创建一个名为film_pic的文件夹
2.4.2 创建图片文件

命名图片名后,以二进制模式写入图片二进制编码数据:

with open(f'./film_pic/{i}.jpg','wb') as fp:
    fp.write(img_con)

2.5 爬取成功图片

二、完整代码实现

import os.path #导入包用来创建新的文件夹
import requests
from lxml import etree

if __name__ == '__main__':
    # UA伪装
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
    }
    # 获取url
    url = 'https://movie.douban.com/top250'

    # 发送请求
    response = requests.get(url,headers=head)
    # 返回数据类型
    cont_text = response.text
    # print(cont_text)#打印数据,用于查看是否爬取成功
    #对得到的数据进行解析
    tree=etree.HTML(cont_text)
    # print(tree)
    #获取所有的li标签
    lis_li=tree.xpath("//ol[@class='grid_view']/li")
    # print(lis_li)
    #将每一条li标签分别提取出来

    os.mkdir('./film_pic') #创建同级文件夹用来存放图片文件

    i=0
    for li in lis_li:
        #对单个li标签进行xpath处理
        #xpath返回列表,用join去除列表
        img_url="".join(li.xpath('./div/div[1]/a/img/@src'))
        # print(img_url)
        #发送get请求
        img_response=requests.get(img_url,headers=head)
        #获取图片的二进制数据
        img_con=img_response.content
        print(img_con)
        with open(f'./film_pic/{i}.jpg','wb') as fp:
            fp.write(img_con)
        i=i+1

三、随机生成UA标识

import fake_useragent

#随机生成浏览器标识,其中包括window、mac、Android、iOS系统
head={
    'User-Agent':fake_useragent.UserAgent().random
}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜就多练_0828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值