• 20 - 爬虫伪装和bs4数据解析


    Day 20

    一、 图片下载

    1.网页图片下载

    • 如果需要对网页上的图片进行下载,需要得到图片的地址,在利用 requests请求图片地址进行下载,但需要主要的是,在对图片、视频等文件保存时,需要对文件进行二进制保存。

    2.图片下载顺序

      1. 对图片地址发送请求
      1. 获取图片数据
      1. 将数据写入图片文件中
    import requests
    
    
    def download_image(url: str):
        # 1. 对图片地址发送请求
        response = requests.get(url)
    
        # 2.获取图片数据
        data = response.content
    
        # 3. 将数据写入图片文件中
        with open('files/宝儿姐.jpeg', 'wb') as f:
            f.write(data)
    
    
    if __name__ == '__main__':
        download_image('https://img0.baidu.com/it/u=1668990314,419582566&fm=253&fmt=auto&app=138&f=JPEG?w=350&h=350')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    二、浏览器伪装

    1.对爬虫进行伪装

    • 在我们使用爬虫对所需网页数据进行爬取时,很多网站都会设置有反爬机制,我们需要对我们的爬虫进行伪装。

    2…headers = {}

    • headers是一个字典:{key:value}
    • headers是给爬虫提供伪装的
    • User-Agent --> 将爬虫伪装成浏览器
    • User-Agent获取方法
    import requests
    
    headers = {
        'user-agent': ******************
    }
    response = requests.get('https://movie.douban.com/top250', headers=headers)
    
    print(response.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、bs4数据解析

    1.bs4的作用

    • 专门用来解析网页数据的第三方库。(基于css选择器解析网页数据)
    • 这个库下载的时候用’beautifulsoup4’, 使用的时候用’bs4’
    • 注意:在使用bs4做数据解析的时候,需要依赖’lxml’这个第三方
    • 导入解析相关类
    from bs4 import BeautifulSoup
    
    • 1

    2. bs4的用法

    • 1.备需要解析的数据(获取网页数据)
    html = open('files/test.html', encoding='utf-8').read()
    
    • 1
    • 2.基于网页源代码创建BeautifulSoup对象
    • soup对象代表网页对应的html标签(代表整个网页)
    soup = BeautifulSoup(html, 'lxml')
    
    • 1
      1. 获取标签
      • soup.select(css选择器) - 在整个网页中获取css选择器选中的所有标签,返回值是一个列表,列表中元素是标签对象
      • soup.select_one(css选择器) - 在整个网页中获取css选择器选中的第一个标签,返回值是标签对象
      • 标签对象.select(css选择器) - 在指定标签中获取css选择器选中的所有表情,返回值是一个列表,列表中元素是标签对象
      • 标签对象.select_one(css选择器) - 在指定标签中获取css选择器选中的第一个标签,返回值是标签对象
    • 4.获取标签内容和标签属性

      • a. 获取标签内容: 标签对象.text
      • b.获取标签属性值: 标签对象.attrs[属性名]
  • 相关阅读:
    解决node项目一个极度困难的捕获异常却无法读取异常信息的问题
    介绍油封的存放方法?
    将组件直接绑定到vue实例上面的写法
    SpringBoot整合MQTT
    在公司项目中使用git的简单手册
    视频增强修复工具Topaz Video AI mac中文版安装教程
    狮群算法优化长短期神经网络LSTM的煤炭销量预测资源,LSTM详细原理,狮群算法原理
    ADB环境搭建和抓取Crash日志实践总结
    pytorch之nn.Conv1d详解
    神经网络NN
  • 原文地址:https://blog.csdn.net/Mr_suyi/article/details/126336370