python爬虫基础:day8

1,数据提取之lxml模块与xpath工具

lxml是一款高新能的python html/xml解析器,我们可以利用xpath,来快速的定位特定元素以及获取节点信息

 

 2,谷歌浏览器xpath helper插件的安装和使用

 

3,xpath语法--基础节点选择语法

 4, xpath语法-节点修饰语法

 

5,xpath语法-其他常用节点选择语法

  • // 的用途

    • //a 当前html页面上的所有的a
    • bookstore//book bookstore下的所有的book元素
  • @ 的使用

    • //a/@href 所有的a的href
    • //title[@lang="eng"] 选择lang=eng的title标签
  • text() 的使用

    • //a/text() 获取所有的a下的文本
    • //a[texts()='下一页'] 获取文本为下一页的a标签
    • a//text() a下的所有的文本
  • xpath查找特定的节点

    • //a[1] 选择第一个a
    • //a[last()] 最后一个
    • //a[position()<4] 前三个
  • 包含

    • //a[contains(text(),"下一页")]选择文本包含下一页三个字的a标签**
    • //a[contains(@class,'n')] class包含n的a标签

6,lxml模块的安装与使用示例

from lxml import etree
text = ''' 
<div> 
  <ul> 
    <li class="item-1">
      <a href="link1.html">first item</a>
    </li> 
    <li class="item-1">
      <a href="link2.html">second item</a>
    </li> 
    <li class="item-inactive">
      <a href="link3.html">third item</a>
    </li> 
    <li class="item-1">
      <a href="link4.html">fourth item</a>
    </li> 
    <li class="item-0">
      <a href="link5.html">fifth item</a>
  </ul> 
</div>
'''
# html = etree.HTML(text)
# 获取href的列表和title的列表

#【方式一】
# href_list = html.xpath("//li[@class='item-1']/a/@href")  #取属性
# title_list = html.xpath("//li[@class='item-1']/a/text()")  #取文本
# # print(href_list)
# # print(title_list)

#组装成字典
# for href in href_list:
#     item = {}
#     item["href"] = href
#     item["title"] = title_list[href_list.index(href)]  #index取出文本
#     print(item)

# 【方式二】
html = etree.HTML(text)
li_list = html.xpath("//li")
# 遍历列表
for li in li_list:
    item = {}
    # li :element  xpath--返回列表
    item['href'] = li.xpath("./a/@href")[0]  if len(li.xpath("./a/@href") )>0  else None
    item['title'] = li.xpath("./a/text()")[0]  if len(li.xpath("./a/text()") )>0  else None
    print(item)

 7.lxml的自动补全html以及文件访问   etree.tostring(html).decode()

  • lxml.etree.HTML(html_str)可以自动补全标签

  • lxml.etree.tostring函数可以将转换为Element对象再转换回html字符串

  • 爬虫使用lxml来提取数据,应该以lxml.etree.tostring的返回结果作为提取数据的依据

##### 知识点:掌握 lxml模块中使用xpath语法定位元素提取属性值或文本内容
##### lxml模块中etree.tostring函数的使用
####> 运行下边的代码,观察对比html的原字符串和打印输出的结果

from lxml import etree
# html_str = ''' <div> <ul>
#       <li class="item-1"><a href="link1.html">first item</a></li>
#       <li class="item-1"><a href="link2.html">second item</a></li>
#       <li class="item-inactive"><a href="link3.html">third item</a></li>
#       <li class="item-1"><a href="link4.html">fourth item</a></li>
#       <li class="item-0"><a href="link5.html">fifth item</a>
#       </ul> </div> '''

# 1,lxml.etree.HTML(html_str) 可以自动补全标签
# html = etree.HTML(html_str)  #利用etree.HTML,将字符串解析为HTML文档
# # print(html)  #大的元素
# handeled_html_str = etree.tostring(html).decode()  # 按字符串序列化HTML文档    #元素变成字符串,自定补全标签
# print(handeled_html_str)

# 2,从文件读取html
# 除了直接读取字符串,lxml还支持从文件里读取内容
# 利用 etree.parse() 方法来读取文件。
html = etree.parse('./Demo.html')
# print(html)
result = etree.tostring(html).decode()
print(result)

 8,XPath实例测试

from lxml import etree
html = etree.parse("./Demo.html")
# 1,获取所有的li标签
li_list = html.xpath('//li')
print(type(li_list))
print(li_list)
print(li_list[0])
print(li_list[0].xpath('./a/text()'))
# 2,继续获取li标签的所有class 属性
result = html.xpath('//li/@class')
print(result)
# 3,继续获取li标签下href为link1.html的<a>标签
result2 = html.xpath('//li/a[@href="link1.html"]')
print(result2)
print(result2[0].text)
# 4,获取li标签下的所有span标签
result3 = html.xpath('//li//span')
print(result3)
# 5,获取li标签下的a标签里的所有class
result4 = html.xpath('//li/a//@class')
print(result4)
# 6,获取最后一个li里边的a的href属性值
result6 = html.xpath('//li[last()]/a/@href')
print(result6)
# 7.获取倒数第二个元素的内容
result7 = html.xpath('//li[last()-1]/a') #标签
print(result7)
print(result7[0].text)
# 8,获取class值为bold的标签
result8 = html.xpath('//*[@class="bold"]')  #标签
print(result8)
# lxml的element
print(result8[0].tag)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个提供在线教育的学习平台,他们提供了Python爬虫的相关教学课程。通过学习这些课程,你可以获得Python基础知识、前端基础知识、计算机网络基础以及爬虫原理等方面的知识。Python基础教学可以参考B站尚硅谷的教学视频,这些视频可以帮助你建立起对Python的基本认识。而前端基础知识包括HTML、CSS和JavaScript的学习,它们分别代表网页的骨架、肌肉和皮肤,只有结合起来才能形成一个完整的网页。此外,你还可以通过学习计算机网络基础来理解HTTP和HTTPS、URL以及网页请求等内容。爬虫原理也是其中的一部分内容,它可以帮助你了解如何通过爬虫程序获取网页数据。所以,如果你对Python爬虫感兴趣,尚硅谷提供的Python爬虫课程可能是一个不错的选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [零基础自学python爬虫笔记Day1——爬虫的基本原理](https://blog.csdn.net/Seyhang/article/details/119420052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Python爬虫】urllib库——尚硅谷](https://blog.csdn.net/qq_48108092/article/details/126097408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值