数据提取-Xpath

1. 介绍

之前BeautifulSoup的用法,这已经是很强大的库了,不过还有一些比较流行的解析库,例如lxml,使用的是Xpath语法,同样是效率比较高的解析方法,如果对BeautifulSoup使用不太习惯,可以尝试下Xpath

  1. 解析页面模块比较:
    • 正则表达式是进行内容匹配,将符合要求的内容全部获取;
    • xpath()能将字符串转化为标签,它会检测字符串内容是否为标签,但是不能检测出内容是否为真的标签;
    • Beautifulsoup是Python的一个第三方库,它的作用和 xpath 作用一样,都是用来解析html数据的相比之下;xpath的速度会快一点,因为xpath底层是用c来实现的
  2. 三者语法不同,正则表达式使用元字符,将所有获得内容与匹配条件进行匹配,
    而xpath和bs4将获取的解析后的源码进行按条件筛选,筛选出想要的标签即根据标签属性来找到指定的标签,之后对标签进行对应内容获取;
    xpath:全称XML PATH Language, 一种小型的查询语言;
    支持的解析:
    XML格式,html格式, 通过元素,和属性进行导航
    官网:http://lxml.de/index.html
    w3c:http://www.w3school.com.cn/xpath/index.asp

2. 安装

pip install lxml

3.Xpath的语法

3.1选取节点
3.1.1 常用的路径表达式

在这里插入图片描述

3.1.2.通配符

XPath通配符可用来
选取位置的XML元素
在这里插入图片描述

3.1.3 选取若干路径

通过在路径表达式中使用“|”运算符,可以选取若干个路径
在这里插入图片描述

3.1.4 谓语

谓语被切在方括号内,用来查找某个特定的节点或包含某个指定的值的节点
在这里插入图片描述

3.1.5 XPath运算符

在这里插入图片描述

3.2 使用

selector = etree.HTML(html)
对全文进行扫描
div[@id=“content”]
str = selector.xpath(’//div[@id=“content”]/ul[@id=“ul”]/li/text()’)

需求: 获取文件中div的属性id为”url“里面的所有a标签的href属性
str = selector.xpath(’//div[@id=“url”]/a/@href’)

获取符合条件的标签内容;
str = selector.xpath(’//div"]’).extract()

小例子:
爬取界面
在这里插入图片描述
代码:

from lxml import etree
from random import choice
import requests
user_agents=[
    "User-Agent:Mozilla/5.0(Windows;U;WindowsNT6.1;en-us)AppleWebKit/534.50(KHTML,likeGecko)Version/5.1Safari/534.50",
    "User-Agent:Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
]
headers={
   
    "User-Agent":choice(user_agents)
}
url="https://www.qidian.com/rank/yuepiao?chn=21"
response=requests.get(url,headers)
#核心代码
e=etree.HTML(response.text)
names=e.xpath('//h4/a/text()')
authors=e.xpath('//p[@class="author"]/a[1]/text()')

for name,author in zip(names,authors):
    print(name,":",author)

爬取mooc网的课程

"""
- 爬取的链接: http://www.imooc.com/course/list
- 爬取的内容: 课程链接, 课程的图片url, 课程的名称, 学习人数, 课程描述
- 爬取的内容如何存储:
    - 文件(.csv, );
    - mysql数据库;
- 分析爬取的信息;
    - 词云

"""
import re

import requests
import lxml.etree as etree
import csv


def get_content(url):
    """爬取页面内容的函数"""

    try:
        user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36"
        response = requests.get(url, headers=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值