python爬虫教程之bs4解析和xpath解析详解

目录
  • bs4解析
    • 原理:
    • 如何实例化BeautifulSoup对象:
    • 用于数据解析的方法和属性:
  • xpath解析
    • xpath解析原理:
    • 实例化一个etree对象:
    • xpath(‘xpath表达式’)
  • 总结

bs4解析

原理:

1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

如何实例化BeautifulSoup对象:

from bs4 import BeautifulSoup

BeautifulSoup(参数一,参数二)

参数一为文件描述符,参数二为解析器,一般为’lxml’

一对象的实例化:

1.将本地的html文档中的数据加载到该对象中

fp = open( './test.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')

2.将互联网上获取的页面源码加载到该对象中

page_text =response.text
soup=BeatifulSoup(page_text,'lxml')

soup指初始化的BeautifulSoup对象

用于数据解析的方法和属性:

1.soup.tagName:返回的是文档中第一次出现的tagName对应的标签

2.soup.find():

(1).find( ‘tagName’):等同于soup.tagName

(2).属性定位:soup.find(‘div’,class_/id/或者其他属性=‘song’)

定位到< div class=“song”>/< div id=“song”>的标签下

class如果没有加_则代表关键字

3.soup.find_all(‘tagName’):返回符合要求的所有标签(列表)

soup对象:

<div class="tang">
    <ul>
        <li><a href="http://www.baidu.com" rel="external nofollow"  title= "ging">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></1i>
        <li><a href="http://www.163.com" rel="external nofollow"  title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></1i>
        <li><a href=" http://ww.126.com" rel="external nofollow" alt="qi ">歧王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
        <li><a href="http: //www.sina.com" rel="external nofollow"  class="du">杜甫</a></li>
        <li><a href="http://www.dudu.com" rel="external nofollow"  class="du">杜牧</a></li>
        <li><b>杜小月</b></li>
        <li><i>度蜜月</i></li>
        <li><a href="http://ww.hana.com”id=" rel="external nofollow" feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
    </ul>
</div>

4.select:

- select(‘某种选择器(id,class,标签…选择器)’),返回的是一个列表。

标签什么都不加,class前面加. id前面加#

层级选择器:

>表示的是一个层级;空格表示的多个层级

     soup.select( '.tang > ul > li > a')
     soup.select( '.tang >ul a')
     结果为:[<a href="http://www.baidu.com" title= "ging">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a>,
     <a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a>,
     <a href=" http://ww.126.com"alt="qi ">歧王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a>,
     <a href="http: //www.sina.com" class="du">杜甫</a>,
     <a href="http://www.dudu.com" class="du">杜牧</a>,
    <a href="http://ww.hana.com”id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>]

5.获取标签之间的文本数据:

-soup.a.text/string/get_text()

-text/get_text():可以获取某一个标签中所有的文本内容

-string:只可以获取该标签下面直系的文本内容

6.获取标签中属性值:

soup.a[‘属性值’]

print(soup.select( '.tang > ul > li > a') [0]['href'])
结果:
www.baidu.com

xpath解析

最常用且最便捷高效的一种解析方式。通用性。

xpath解析原理:

1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。

2调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。

实例化一个etree对象:

from lxml import etree

-1.将本地的html文档中的源码数据加载到etree对象中:

etree.parse(filePath)

-2.可以将从互联网上获取的源码数据加载到该对象中

etree.HTML( 'page_text')

xpath( ‘xpath表达式’)

xpath表达式:(返回一个列表)

-/:表示的是从根节点开始定位。表示的是一个层级。

-//:表示的是多个层级。可以表示从任意位置开始定位。

-属性定位://div[@class=‘song’] tag[@attrname=‘attrvalue’]

-索引定位://div[@class=‘song’]/p[3]

索引从1开始的

取文本:

  • /text()获取的是标签中直系的文本内容
  • //text(标签中非直系的文本内容(所有的文本内容)

取属性:

  • /@attrName
  • eg:/img/@src
  • ./表示定位到当前位置(局部解析)

多个xpath之间用|分割:

  • tree.xpath(’//div[@class=‘song’]/p[3] | //div[@class=‘song’]’)

总结

到此这篇关于python爬虫教程之bs4解析和xpath解析的文章就介绍到这了,更多相关python bs4和xpath解析内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python爬虫使用bs4方法实现数据解析

    聚焦爬虫: 爬取页面中指定的页面内容. 编码流程: 1.指定url 2.发起请求 3.获取响应数据 4.数据解析 5.持久化存储 数据解析分类: 1.bs4 2.正则 3.xpath (***) 数据解析原理概述: 解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储 1.进行指定标签的定位 2.标签或者标签对应的属性中存储的数据值进行提取(解析) bs4进行数据解析数据解析的原理: 1.标签定位 2.提取标签.标签属性中存储的数据值 bs4数据解析的原理: 1.实例化一个Beauti

  • 关于python中的xpath解析定位

    爬取的网站:http://jbk.39.net/chancegz/ 这里只针对个别属性值: #例如:'别名'下的span标签文本,'发病部位'下的span标签文本以及'挂号科室'下的span标签文本 # def disease(url): text = get_html(url) tree = etree.HTML(text) bm = tree.xpath('//ul[@class="information_ul"]/li/i[text()="别名:"]/foll

  • Python中利用xpath解析HTML的方法

    在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块(用来分析XML文档结构的,当然也能分析html结构), 利用其lxml.html的xpath对html进行分析,获取抓取信息. 首先,我们需要安装一个支持xpath的python库.目前在libxml2的网站上被推荐的python binding是lxml,也有beautifulsoup,不嫌麻烦的话还可以自己用正则表达式去构建,本文以lxml为例讲解. 假设有如下的HTML文档: <html> <

  • python2使用bs4爬取腾讯社招过程解析

    目的:获取腾讯社招这个页面的职位名称及超链接 职位类别 人数 地点和发布时间 要求:使用bs4进行解析,并把结果以json文件形式存储 注意:如果直接把python列表没有序列化为json数组,写入到json文件,会产生中文写不进去到文件,所以要序列化并进行utf-8编码后写入文件. # -*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup as bs import json url = 'https://hr.te

  • python爬虫之bs4数据解析

    一.实现数据解析 因为正则表达式本身有难度,所以在这里为大家介绍一下 bs4 实现数据解析.除此之外还有 xpath 解析.因为 xpath 不仅可以在 python 中使用,所以 bs4 和 正则解析一样,仅仅是简单地写两个案例(爬取可翻页的图片,以及爬取三国演义).以后的重点会在 xpath 上. 二.安装库 闲话少说,我们先来安装 bs4 相关的外来库.比较简单. 1.首先打开 cmd 命令面板,依次安装bs4 和 lxml. 2. 命令分别是 pip install bs4 和 pip

  • python爬虫教程之bs4解析和xpath解析详解

    目录 bs4解析 原理: 如何实例化BeautifulSoup对象: 用于数据解析的方法和属性: xpath解析 xpath解析原理: 实例化一个etree对象: xpath(‘xpath表达式’) 总结 bs4解析 原理: 1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中 2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取 如何实例化BeautifulSoup对象: from bs4 import BeautifulSoup Be

  • python爬虫爬取监控教务系统的思路详解

    这几天考了大大小小几门课,教务系统又没有成绩通知功能,为了急切想知道自己挂了多少门,于是我写下这个脚本. 设计思路: 设计思路很简单,首先对已有的成绩进行处理,变为list集合,然后定时爬取教务系统查成绩的页面,对爬取的成绩也处理成list集合,如果newList的长度增加了,就找出增加的部分,并通过邮件通知我. 脚本运行效果: 服务器: 发送邮件通知: 代码如下: import datetime import time from email.header import Header impor

  • Go语言学习教程之goroutine和通道的示例详解

    目录 goroutine 通道 Range 和 Close Select 官方留的两道练习题 等价的二叉树 网络爬虫 源码地址 goroutine goroutine是由Go运行时管理的轻量级线程. go f(x, y, z)在一个新的goroutine中开始执行f(x, y,z). goroutines运行在相同的地址空间中,所以对共享的内存访问必须同步.sync包提供了基本的同步原语(synchronization primitives),比如互斥锁(mutual exclusion loc

  • Python爬虫番外篇之Cookie和Session详解

    关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解 什么是Cookie 其实简单的说就是当用户通过http协议访问一个服务器的时候,这个服务器会将一些Name/Value键值对返回给客户端浏览器,并将这些数据加上一些限制条件.在条件符合时,这个用户下次再访问服务器的时候,数据又被完整的带给服务器. 因为http是一种无状态协议,用户首次访问web站点的时

  • Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解

    目录 1.项目介绍 2.快速上手 3.官方文档介绍 接口文档(APIDocumentation) 主题(Themes) 画廊(Gallery) 1.项目介绍 ttkbootstrap 是一个基于 tkinter 的界面美化库,使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序.如果会 tkinter 学习起来就会非常简单,如果不会的话只要先花两三天的时间系统学习一下 tkinter 之后再来使用 bootstrap 也是一样. ttkbootstrap 不仅有丰

  • Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解

    本文实例讲述了Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法.分享给大家供大家参考,具体如下: MVC结构中视图层和控制器的解耦,以及渲染.往往是重复或者冗余的工作.如果一个完善的框架,对MVC的使用,必定会对这些操作进行合理的设计.让开发者更专注内容而不是控制逻辑结构本身.在ZendFramework中,主要是通过动作助手ViewRenderer来完成这个操作的.ViewRenderer 自动的完成在控制器内建立视图对象并渲染视图的过程: Vie

  • python爬虫学习笔记之pyquery模块基本用法详解

    本文实例讲述了python爬虫学习笔记之pyquery模块基本用法.分享给大家供大家参考,具体如下: 相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再选取 元素的文本.属性等内容的获取 pyquery执行DOM操作.css操作 Dom操作 CSS操作 一个利用pyquery爬取豆瓣新书的例子 首发时间:2018-03-09 21:26 pyquery的介绍 pyquery允许对xml.html文档进行jQuery查询

  • JavaScript进阶教程之非extends的组合继承详解

    目录 前言 一:call() 的作用与使用 1.1 使用 call() 来调用函数 1.2 使用 call() 来改变 this 的指向 二:利用构造函数继承父属性 2.1 实现过程 2.1 实现过程分析 三:利用原型对象继承父方法 3.1 继承父方法的错误演示 3.2 继承父方法的正确做法 3.2 继承父方法的注意事项 总结 前言 继承也是面向对象的特性之一,但是在 ES6 版本之前是没有 extends 去实现继承的,我们只能通过 构造函数 和 原型对象 来实现继承,其中分别为构造函数来继承

  • python爬虫的一个常见简单js反爬详解

    前言 我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了. 我把js反爬分为参数由js加密生成和js生成cookie等来操作浏览器这两部分,今天说的是第二种情况. 目标网站 列表页url:  http://www.hnrexian.com/archives/category/jk. 正常网站我们请求url会返回给我们网页数据内容等,看看这个网站返回给我们的是什么呢? 我们把相应中返回的js代码格式化一下,方便查看. < script typ

  • JVM核心教程之JVM运行与类加载全过程详解

    为什么要使用类加载器? Java语言里,类加载都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会给java应用程序提供高度的灵活性.例如: 1.编写一个面向接口的应用程序,可能等到运行时再指定其实现的子类: 2.用户可以自定义一个类加载器,让程序在运行时从网络或其他地方加载一个二进制流作为程序代码的一部分:(这个是Android插件化,动态安装更新apk的基础) 为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程

随机推荐