第二章 页面爬取应用-缺失数据处理、图片下载、懒加载 2021-09-14

news/2024/7/19 9:23:56 标签: 爬虫, python

爬虫系列总目录

本章节介绍爬虫中使用的基础库用于选择,过滤页面信息。包括requests,bs4,xpath,正则表达式re,json 等内容,能够实现对简单页面的获取。
第二章 爬虫基础库-requests/bs4
第二章 正则表达式
第二章 简单网页的爬取与Xpath、Json使用
第二章 页面爬取应用-缺失数据处理、图片下载、懒加载


页面爬取应用-缺失数据处理、图片下载、懒加载

  • 爬虫系列总目录
  • 一、缺失数据处理的思路
  • 二、图片下载
  • 三、 图片懒加载介绍
    • 3.1 图片懒加载介绍
    • 3.2 懒加载解决办法


一、缺失数据处理的思路

获取对应关系的标签由于缺失导致数量不匹配,取上层元素进行变量。然后取出当前元素下的子标签。

python">import requests
from lxml import etree


def get_response(url, headers=None):
    """获取段子网的响应"""
    _headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'
    }
    if headers:
       _headers = headers
    res = requests.get(url, headers=_headers)
    return res.content.decode()   # 如果当前网站不是utf8的编码 需要在括号内指定对应的编码


def main():
    """
    xpath 练习使用,获取页面数据
    """
    url = 'https://36kr.com/'
    response = get_response(url)
    contents = etree.HTML(response, etree.HTMLParser())

    # 获取所有的父节点
    total_data = contents.xpath('//*/div[@class="article-item-info clearfloat"]')
    for each_data in total_data:
        # 查询父节点下面的的标签
        titles = each_data.xpath("./p/a")
        if len(titles) != 0:
            res_title = each_data.text
        authors = each_data.xpath("./div/a")
        if len(authors) != 0:
            author = authors[0].text

二、图片下载

  • 解析原网页,分析页面,获取页面的图片的src 下载路径,请求图片保存文件。
python"># 根据返回内容的编码修改编码
response.encoding = response.apparent_encoding

代码如下(示例):

python">def save_img(path, img_url, img_name):
    _headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'
    }
    bool_ = os.path.exists(path)
    if not bool_:
        os.makedirs(path)
    path = os.path.join(path, img_name + '.jpg')

    with open(path, 'wb') as f:
        # 请求图片的数据
        img_response = requests.get(img_url, headers=_headers)
        # 保存数据
        f.write(img_response.content)
        print('{}.jpg已下载完成'.format(img_name))

三、 图片懒加载介绍

3.1 图片懒加载介绍

一张图片就是一个标签,浏览器是否发起请求图片是根据的src属性,所以实懒加载的关键就是,在图片没有进入可视区域时,先不给的src赋值,这样浏览器就不会发送请求了,等到图片进入可视区域再给src赋值。

3.2 懒加载解决办法

这里网页中img 标签中使用非src 的src2, 绕过浏览器编译渲染过程。分析页面后,获取src2 即可。

python">    src =html.xpath("//div[@id='container']/div/div/a/img/@src")
    src =html.xpath("//div[@id='container']/div/div/a/img/@src2")
    img_name =html.xpath("//div[@id='container']/div/div/a/img/@alt")
    src.extend(src2)

http://www.niftyadmin.cn/n/1857628.html

相关文章

华人泰斗黄煦涛逝世,贤伉俪深情六十载

By 超神经内容概要:计算机视觉之父,华人视觉先驱黄煦涛( Thomas S.Huang)近日逝世,让人工智能学术圈为之悲痛,黄煦涛先生的学术成就无需多言。他的为人和风骨,更是受到亲友师生的一致称颂。关键…

Java线程:概念与原理

一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe…

Spring-XML使用-IoC配置与依赖(DI)配置 2021-09-13

Spring的基础和应用系列文章目录 第一部分 Spring 基础 1.1 XML使用-IoC配置与依赖(DI)配置 1.2 基于注解和XML混合方式的使用 1.3 基于纯注解方式的使用 1.4 AOP 介绍 1.5 Spring 整合AspectJ的AOP使用 第二部分 组件支持 2.1 Spring 整合Junit 2.2 S…

剑桥分析事件落幕, Facebook 认罚 50 亿美元

By 超神经内容概要:近日 Facebook 和 FTC ,就剑桥分析事件达成的和解协议,被联邦法院正式批准,意味着隐私安全史上最大的罚单正式生效。关键词:Facebook 剑桥分析 用户数据日前,Facebook 和美国联邦贸易委…

web中的树形结构【小结】

最近在做一个项目,是一个b/s架构的,在项目中,用到了树形结构,即如图1所示的结构。在实现的过程中,因为我们的整个项目是基于Ext js实现的,所以首先考虑的是用Ext js的Tree来实现,但是在后来做的…

Spring-基于注解和XML混合方式的使用 2021-09-15

Spring的基础和应用系列文章目录 第一部分 Spring 基础 1.1 XML使用-IoC配置与依赖(DI)配置 1.2 基于注解和XML混合方式的使用 1.3 基于纯注解方式的使用 1.4 AOP 介绍 1.5 Spring 整合AspectJ的AOP使用 第二部分 组件支持 2.1 Spring 整合Junit 2.2 S…

08-php中的抽象类

<?php//抽象类的使用abstract class Animal{abstract public function cry();}class dog extends Animal{public function cry(){echo "<br/>小狗旺旺叫...";}}class Pig extends Animal{public function cry(){echo "<br/>小猪哼哼叫...."…

Spring-基于纯注解方式的使用 2021-09-15

Spring的基础和应用系列文章目录 第一部分 Spring 基础 1.1 XML使用-IoC配置与依赖&#xff08;DI&#xff09;配置 1.2 基于注解和XML混合方式的使用 1.3 基于纯注解方式的使用 1.4 AOP 介绍 1.5 Spring 整合AspectJ的AOP使用 第二部分 组件支持 2.1 Spring 整合Junit 2.2 S…