《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
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 16:22:02       138 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 16:22:02       152 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 16:22:02       128 阅读
  4. Python语言-面向对象

    2024-07-21 16:22:02       140 阅读

热门阅读

  1. GFS分布式文件系统

    2024-07-21 16:22:02       24 阅读
  2. 牛客暑假训练2 C.Red Walking on Grid

    2024-07-21 16:22:02       27 阅读
  3. Python之后端Django(六)

    2024-07-21 16:22:02       22 阅读
  4. blender和3dmax和maya和c4d比较

    2024-07-21 16:22:02       23 阅读
  5. 数据结构第33节 在不同领域的应用

    2024-07-21 16:22:02       19 阅读
  6. 【软考】UML中的关联关系

    2024-07-21 16:22:02       30 阅读
  7. firefly rk3288 ubuntu23.10 网卡名为end0 改为eth0

    2024-07-21 16:22:02       22 阅读
  8. C++狼人杀游戏(真的能运行!!!)

    2024-07-21 16:22:02       23 阅读
  9. 跨平台游戏引擎 Axmol-2.1.4 发布

    2024-07-21 16:22:02       30 阅读
  10. 使用 hutool工具实现导入导出功能。

    2024-07-21 16:22:02       32 阅读
  11. https证书申请

    2024-07-21 16:22:02       28 阅读
  12. feign 报错 Connection reset executing POST

    2024-07-21 16:22:02       24 阅读
  13. Python 热门面试题(七)

    2024-07-21 16:22:02       24 阅读