首页 > 其他分享 >爬虫:xpath高级使用,bs4使用,bs4-css选择器

爬虫:xpath高级使用,bs4使用,bs4-css选择器

时间:2024-08-05 22:25:03浏览次数:17  
标签:xpath bs4 li soup html print div 选择器

xpath高级使用

from lxml import etree

# 由于本次要格式化的内容是一个文件,所以用parse,如果是一个html格式的字符串 就用HTML
html = etree.parse('02_xpath.html')

# 可以连接多个 但是每两个之间要用一个管道符来连接
# print(html.xpath('//ol/li[@data="one"]/text() | //ul/li[@code="84"]/text()'))

# 轴的用法:关键字加两个冒号,后面跟上要选取的元素的名字

# child轴:xpath默认使用的轴 作用和斜杠一样
# print(html.xpath('//div[@id="testid"]/ul/li/text()'))
# print(html.xpath('//div[@id="testid"]/child::ul/child::li/child::text()'))

# attribute轴:作用和@一样
# print(html.xpath('//div[@id="testid"]/@data-h'))
# print(html.xpath('//div[attribute::id="testid"]/attribute::data-h'))

# ancestor轴:获取当前节点指定的父节点,如果父节点不是指定的值则不会获取到,如果父节点的父节点也是同一个指定的值,那么也会获取到,更上层也一样
# print(html.xpath('//li[@data="one"]/../../@id'))  # 不管父节点是什么,只要满足结构的父节点都能获取到
# print(html.xpath('//li[@data="one"]/ancestor::ol/ancestor::div/@id')) # 必须当li的父节点是li才会获取到
# print(html.xpath('//li[@data="one"]/ancestor::div/@id'))

# ancestor-or-self轴:作用是获取自己本身和父节点,必须自己本身和父节点都是这个指定的值
# print(html.xpath('//div[@id="testid"]/ancestor-or-self::div/@id'))

# following轴:获取当前标签的结束标签之后的所有指定的标签
# print(html.xpath('//div[@id="testid"]/following::div//li[1]/text()'))

# preceding轴:获取当前节点之前的所有节点 是从上往下获取
# print(html.xpath('//div[@id="go"]/preceding::div//li[1]/text()'))

# 作用和两个点一模一样,获取当前节点的父节点
# print(html.xpath('//h2/../@id'))
# print(html.xpath('//h2/parent::div/@id'))

# count统计
# print(html.xpath('count(//li)'))
# print(html.xpath('count(//li[@data])'))

# contains:查看前一个里面有没有包含第二个
# 先根据code来查找所有包含code属性的li,然后看哪一个里面有84
# print(html.xpath('//li[contains(@code,"84")]/text()'))

print(html.xpath('count(//li[not(@data)])'))

bs4使用

from bs4 import BeautifulSoup
import re
案例
html = """
<html>
<head><title id='123' class='story' name='aaa'>story12345</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><span>westos</span><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister1" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
<p>story</P>
"""
# 第一个参数是一个字符串,第二个参数是固定的
# 普通的html对象经过bs构造后,里面每一个标签就变成了tag对象
soup = BeautifulSoup(html,'html.parser')
# print(soup)

# print(soup.title.name)
# print(soup.title.attrs)
# print(soup.title.text)

# print(soup.title.attrs['name'])
# print(soup.title.attrs.get('data'))

#
# title = soup.title
# print(title.name)

# print(soup.a)
# print(soup.a.string) # 只有当标签中没有标签 或者只有一个子标签的话才能获取到内容
# print(soup.a.text)

# print(soup.find_all('a')) # 这个是由获取到的tag标签组成的列表
# print(soup.find_all('a')[1])
# print(soup.find_all(id='123'))

# print(soup.find_all('p',class_='story'))  # 因为class是关键字 所以使用的时候后面要加下划线

# print(soup.find_all(string='...'))  # 根据文本内容查找 bs4旧版本是text 新版本是string

print(soup.find_all(string=re.compile('.*?little.*?')))

bs4-css选择器

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('02_xpath.html','r',encoding='utf8').read(),'html.parser')
# print(soup)
# print(soup.select('div[data-h="first"] > h2'))  # 得到的是一个列表 列表里面是一个个tag对象
# print(soup.select('[data-h="first"] > ol > [data="one"]'))# >子代选择器
# print(soup.select('[data-h="first"] [data="one"]'))#空格 后代选择器
# print(soup.div.ol.select('[data="one"]'))

# print(soup.select('#go li'))
# print(soup.select('#go li')[2]) #返回第三个
print(soup.select('#go li:nth-of-type(3)'))  #返回第3个

标签:xpath,bs4,li,soup,html,print,div,选择器
From: https://blog.csdn.net/Dxh0112_/article/details/140934410

相关文章

  • el-slider实现一个能拖动的时间范围选择器
    el-slider实现一个能拖动的时间范围选择器<template><divstyle="width:200px"><el-sliderv-model="workTime":step="5":max="1435":marks="marks":format-tooltip="f......
  • el-date-picker周选择器获取选择的日期范围
    el-date-picker周选择器获取选择的日期范围<el-date-pickerv-model="formData.date"type="week"format="yyyy第WW周"placeholder="选择周"@change="weekChange"&......
  • el-date-picker月选择器获取选择的日期范围
    el-date-picker月选择器获取选择的日期范围<el-date-pickerv-model="monthValue"type="month"placeholder="选择月"value-format="yyyy-MM-dd"@change="monthChange"......
  • CSS学习:继承、权重关系、伪类选择器、媒体查询
    1、具有继承性质的样式(可以被子元素继承)color文字颜色 ;font-family字体族;font-size字体大小; font-weight字体粗细;line-height行高;text-align文本对齐方式;visibility可见性;cursor鼠标指针样式。2、不具有继承性质的样式(不能被子元素继承)background-color背景颜色;border......
  • 6.选择器进阶与表单标签
    6.选择器进阶与表单标签1.选择器进阶ul,li{}:并集选择器,一次选择多个元素ulli:空格,这里表示ul后代所有的li标签。ul>li:大于号是指ul的子代标签li。伪类选择器:在特定情况下,给标签添加样式。 hover:当鼠标经过时,触发样式 active:当鼠标点击时,触发样式 visited:当访问过此网站......
  • (一)如何使用 Parsel 和 XPath 进行网页数据提取
    简介在网络爬虫开发中,数据提取是一个至关重要的步骤。Parsel是一个强大的Python库,结合XPath,可以轻松从HTML或XML文档中提取所需数据。本文将介绍Parsel和XPath的基础知识,并展示如何在实际项目中使用它们进行网页数据提取。什么是Parsel?Parsel是一个专门用于处理......
  • Photos框架 - 自定义媒体选择器(相册列表)
    ​​​​​​​Photos框架-自定义媒体资源选择器(数据部分)Photos框架-自定义媒体选择器(UI列表)​​​​​​​Photos框架-自定义媒体选择器(UI预览)Photos框架-自定义媒体选择器(相册列表)引言我们已经实现了媒体资源的列表选择以及媒体资源的大图预览功能,但通常一个......
  • 如何使用 python 和 bs4 修复抓取 web 表输出 csv
    请帮帮我,,我想在“td”、“Barcode”和“namaproduk”中获取2个数据,但我得到的数据非常糟糕。我应该修复什么?importcsvimportrequestsfrombs4importBeautifulSoupoutfile=open("dataaa.csv","w",newline='')writer=csv.writer(outfile)page=0whilepag......
  • 62.Xpath与Selenium
    【一】xpath1)介绍(XMLPathLanguage)一种小型的查询语言2)优点可在XML中查询支持HTML的查询通过元素和属性进行导航#安装pipinstalllxml#使用fromlxmlimportetree#将源码转化为能被XPath匹配的格式selector=etree.HTML(源码)#返回为一列表selector.xpat......
  • 如何使用 bs4 在 phyton 中传递表情符号抓取文本
    我正在创建一个抓取器,用于抓取URL页面中的所有评论,并将文本保存在txt文件中(1条评论=1txt)。现在,当评论文本中有一些表情符号时,我遇到了问题。事实上,程序停止并显示“UnicodeEncodeError:‘charmap’编解码器无法对字符进行编码”。我怎样才能解决这个问题?(我用的是bs4)......