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()

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

  1. python爬虫--数据解析

    数据解析 什么是数据解析及作用 概念:就是将一组数据中的局部数据进行提取 作用:来实现聚焦爬虫 数据解析的通用原理 标签定位 取文本或者属性 正则解析 正则回顾 单字符: . : 除换行以外所有字符 ...

  2. 070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  3. python爬虫数据解析之BeautifulSoup

    BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...

  4. python爬虫数据解析的四种不同选择器Xpath,Beautiful Soup,pyquery,re

    这里主要是做一个关于数据爬取以后的数据解析功能的整合,方便查阅,以防混淆 主要讲到的技术有Xpath,BeautifulSoup,PyQuery,re(正则) 首先举出两个作示例的代码,方便后面举例 ...

  5. Python网络爬虫数据解析的三种方式

    request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...

  6. 爬虫-数据解析-xpath

    xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...

  7. python爬虫数据解析之正则表达式

    爬虫的一般分为四步,第二个步骤就是对爬取的数据进行解析. python爬虫一般使用三种解析方式,一正则表达式,二xpath,三BeautifulSoup. 这篇博客主要记录下正则表达式的使用. 正则表 ...

  8. 02 爬虫数据解析之re,xpath,beautifulsoup

    一.正则匹配 简单用法演示: 字符: print(re.findall(".","abccc31223dn哈哈")) ### . 匹配除了换行符以外的任意字符, ...

  9. python爬虫数据解析之xpath

    xpath是一门在xml文档中查找信息的语言.xpath可以用来在xml文档中对元素和属性进行遍历. 在xpath中,有7中类型的节点,元素,属性,文本,命名空间,处理指令,注释及根节点. 节点 首先 ...

随机推荐

  1. 工程师计划1-> 项目管理1 | 项目与项目管理

    这学期报了一门课,项目管理,是一门网课,但跟之前不一样,我期待能够从这门课中学到一些东西.这是我上学期在组织毛概小组大作业时遇到困难时,意识到自己应该学习这门课. 工程师计划其实是一直以来想要把学习的 ...

  2. 怎样快速对二进制和十进制进行互转化——IP地址规划与设计总结

    转至:https://blog.csdn.net/erlian1992/article/details/47342189 最近一直在看全国计算机三级网络技术这本书,看到第二章的时候,不免会遇到计算机中 ...

  3. 优达学城 UdaCity 纳米学位

    优达学城 UdaCity 纳米学位 Num Course desc 1 AI Programming with Python 使用Python编程基础 2 Android Basics 安卓基础 3 ...

  4. linux多进/线程编程(3)——wait、waitpid函数和孤儿、僵尸进程

    当使用fork创建多个进程后,需要解决子进程回收的问题.wait和waitpid函数就是做这个工作的. 假设子进程没有合理的回收,可能会带来两个问题: 1.孤儿进程(父进程挂了,子进程活着),孤儿进程 ...

  5. 华为交换机ACL如何使用及原则

    华为交换机ACL如何使用及原则 转载自:辣条①号  源链接:https://boke.wsfnk.com/archives/480.html   ACL(访问控制列表)的应用原则:标准ACL,尽量用在 ...

  6. git命令新建远程分支并推送,切换远程地址

    最近记性不好,老是忘记操作命令,记录下一下新建远程分支和切换.删除远程地址的命令: 1.查看当前分支:  git branch 2.查看所有分支:git branch -a 3.切换分支:git ch ...

  7. vue项目部署到阿里云服务器(windows),Nginx代理!

    项目构成: 前端:vue+vant-ui, 数据库:mysql, 后端:node.js 部署方式:nginx代理: 一,首先要拥有自己的服务器,阿里,腾讯都可以,我用的是阿里的: 如果只是做个人项目的 ...

  8. SQL基础语法_张三

    1.1 建库表语法 1.2 字段数据类型 大致可以分为三类:数值.日期/时间和字符串 (字符)类型. 2. 增删查改 3. 关联查询 4. 子查询

  9. docker 部署mysql tomcat时 在root@localhost~下——-——docker exec -it 容器名 /bin/bash 报错

    在docker部署mysql时 报错 找不到 容器不自动启动  , docker start 容器名  也没有效果 多次尝试发现 原因是创建容器时在 下面创建的 更改为下创建 问题解决

  10. Arch Linux 安装 Anbox

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 Anbox 介绍 Anbox 是一个可以在 GNU/Linux 发行版上运行 Android App 的容器,是一个开源兼容层. 其工作原理是在 ...