爬虫-数据解析-bs4

1.数据解析

  • 解析: 根据指定的规则对数据进行提取
  • 作用: 实现聚焦爬虫
  • 数据解析方式:
    - 正则表达式
    - bs4
    - xpath
  • 数据解析的通用原理:
    • 数据解析需要作用在页面源码中(一组html标签组成的)

      html:的核心作用是展示数据
    • 通用原理:
      • 标签定位
      • 获取文本或者属性
  • 正则表达式实现数据解析
    # 需求:爬取糗事百科中糗图数据
    import requests
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    }
    
    #方式1:
    url = 'https://pic.qiushibaike.com/system/pictures/12217/122176396/medium/OM37E794HBL3OFFF.jpg'
    img_data = requests.get(url=url,headers=headers).content #content返回的是byte类型的数据
    with open('./123.jpg','wb') as fp:
        fp.write(img_data)
    
    #方式2:
    from urllib import request
    url = 'https://pic.qiushibaike.com/system/pictures/12217/122176396/medium/OM37E794HBL3OFFF.jpg'
    request.urlretrieve(url,'./456.jpg')
    
    - 方式2不可以使用UA伪装的机制
    
    - urllib就是一个比较老的网络请求的模块,在requests模块没有出现之前,请求发送的操作使用的都是urllib

2.bs4 解析模块

  • 模块安装 :

    • pip install bs4
    • pip install lxml
  • bs4 的解析原理
    • 实例化一个beautifulSoup的对象,并且将即将被解析的源码数据加载到该对象中
    • 调用beautifulSoup对象中的相关属性和方法继续宁标签定位和数据提取
  • 如何实例化BeautifulSoup对象
    • BeautifulSoup(fp,‘lxml‘):专门用作于解析本地存储的html文档中的数据

      from bs4 import BeautifulSoup
      fp = open('./test.html','r',encoding='utf-8')
      soup = BeautifulSoup(fp,'lxml') #将即将被解析的页面源码加载到该对象中
    • BeautifulSoup(page_text,‘lxml‘):专门用作于将互联网上请求到的页面源码数据进行解析
  • 标签定位:

    • soup = BeautifulSoup(page_text,‘lxml‘) 实例化一个对象
    • soup.tagName:定位到第一个TagName标签,返回的是单数
    • 属性定位:soup.find(‘tagName‘,attrName=‘value‘),返回也是单数
      • find_all:和find用法一致,但是返回值是列表
    • 选择器定位:select(‘选择器‘),返回值为列表
      • 标签选择器,类选择器,id选择器,层级选择器(>:一个层级,空格:多个层级)
      from bs4 import BeautifulSoup
      fp = open('./test.html','r',encoding='utf-8')
      soup = BeautifulSoup(fp,'lxml') #将即将被解析的页面源码加载到该对象中
      soup.p
      soup.find('div',class_='song')
      soup.find_all('div',class_='song')
      soup.select('.tang')
      soup.select('#feng')
      soup.select('.tang > ul > li')
      soup.select('.tang li')
      li_6 = soup.select('.tang > ul > li')[6]
      i_tag = li_6.i
      i_tag.string
      soup.find('div',class_='tang').text
      soup.find('a',id="feng")['href']
  • 提取数据

    • 取文本:

      • tag.string:标签中直系的文本内容(只提取直系内的文本)
      • tag.text:标签中所有的文本内容
    • 取属性:
      • tag[‘attrName‘]
    # 爬取三国演义整篇小说内容http://www.shicimingju.com/book/sanguoyanyi.html
    
    url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
    page_text = requests.get(url,headers=headers).text
    soup = BeautifulSoup(page_text,'lxml')
    a_list = soup.select('.book-mulu > ul > li > a')
    fp = open('sanguo.txt','w',encoding='utf-8')
    for a in a_list:
        detail_url = 'http://www.shicimingju.com'+a['href']
        chap_title = a.string
        #对章节详情页的url发起请求,解析详情页中的章节内容
        detail_page_text = requests.get(detail_url,headers=headers).text
        soup = BeautifulSoup(detail_page_text,'lxml')
        chap_content = soup.find('div',class_="chapter_content").text
        fp.write(chap_title+':'+chap_content+'\n')
        print(chap_title,'爬取成功!')
    fp.close()

原文地址:https://www.cnblogs.com/bigox/p/11429733.html

时间: 2024-07-30 16:32:34

爬虫-数据解析-bs4的相关文章

爬虫数据解析的三种方式

一.正则表达式解析 常用正则表达式回顾: 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线.中文 \W : 非\w \s :所有的空白字符包,括空格.制表符.换页符等等.等价于 [ \f\n\r\t\v]. \S : 非空白 数量修饰: * : 任意多次 >=0 + : 至少1次 >=1 ? : 可有可无 0次或者1次 {m} :固定m次 hello{3,} {m,} :至少m次

爬虫-数据解析-xpath

xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的xpath表达式进行标签定位和数据提取 etree对象的实例化 etree.parse(fileNane) 加载本地 etree.HTML(page_text) 加载网络请求的响应 xpath方法返回的永远是一个列表 标签定位 在xpath表达式中最最侧的 / 表示的含义是说,当前定位的标签必须从根节

21天打造分布式爬虫-数据解析实战(三)

3.1.豆瓣电影 使用lxml import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36', 'Referer':'https://movie.douban.com/' } url = 'https

05 Python网络爬虫的数据解析方式

一.爬虫数据解析的流程 1.指定url 2.基于requests模块发起请求 3.获取响应中的数据 4.数据解析 5.进行持久化存储 二.解析方法 (1)正则解析 (2)bs4解析 (3)xpath解析 1. 正则解析 常用正则表达式 1 单字符: 2 . : 除换行以外所有字符 3 [] :[aoe] [a-w] 匹配集合中任意一个字符 4 \d :数字 [0-9] 5 \D : 非数字 6 \w :数字.字母.下划线.中文 7 \W : 非\w 8 \s :所有的空白字符包,括空格.制表符.

爬虫02 /数据解析

目录 爬虫02 /数据解析 1. 数据解析概述 2. 正则实现的数据解析 3. bs4实现数据解析 4. xpath解析 总结: 爬虫02 /数据解析 1. 数据解析概述 什么是数据解析,数据解析可以干什么? 概念:就是将一组数据中的局部数据进行提取. 作用:使用来实现聚焦爬虫 数据解析的通用原理 问题:html展示的数据可以存储在哪里? 标签之中 属性中 1.标签定位 2.取文本或者取属性 数据解析的常用方法 re bs4 xpath pyquery 2. 正则实现的数据解析 需求:http:

Python网络爬虫之三种数据解析方式

引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,本次课程中会给大家详细介绍讲解三种聚焦爬虫中的数据解析方式.至此,我们的数据爬取的流程可以修改为: 指定url 基于requests模块发起请求 获取响应中的数据 数据解析

《Python网络爬虫之三种数据解析方式?

回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,本次课程中会给大家详细介绍讲解三种聚焦爬虫中的数据解析方式.至此,我们的数据爬取的流程可以修改为: 指定url 基于requests模块发起请求 获取响应中的数据 数据解析 进行持

05,Python网络爬虫之三种数据解析方式

回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,本次课程中会给大家详细介绍讲解三种聚焦爬虫中的数据解析方式.至此,我们的数据爬取的流程可以修改为: 指定url 基于requests模块发起请求 获取响应中的数据 数据解析 进行持

爬虫学习 05.Python网络爬虫之三种数据解析方式

爬虫学习 05.Python网络爬虫之三种数据解析方式 引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,本次课程中会给大家详细介绍讲解三种聚焦爬虫中的数据解析方式.至此,我们的数据爬取的流程可以修改为: 指定url 基于r