python爬虫学习小记——lxml板块

发布时间 2023-08-04 13:16:21作者: Curitaos

python爬虫学习小记——lxml板块

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。

XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择。

Xpath语法总结看这篇:XPath定位语法总结_xpath语法_小白典的博客-CSDN博客

导入

from lxml import etree

接下来我将用个简单的实例来体现怎么使用lxml板块

#获取起点网前5页的书名以及其作者
import requests
import os
from lxml import etree

i=1
if not os.path.exists("123.txt"):
    os.makedev("123.txt")
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
number=1

for i in range(1,6):
    url = f"https://www.qidian.com/all/page{i}/"
    responds = requests.get(url, headers)#获取相应对象
    print(responds.encoding)
    html = responds.text#获取其str格式
    tree=etree.HTML(html)#实例化etree对象,只有etree对象才能进行xpath操作
    all_title=tree.xpath("//div[@class='book-mid-info']/h2/a/text()")#获取class为book-mid-info的div下面的h2的a标签的内容
    all_info=tree.xpath("//p[@class='intro']/text()")
    for title in all_title:
        with open("ff.txt","a") as f:
            print(f"{number}.{title}",file=f)
            print(f"简介:{all_info[(number - 1) % 20]}",file=f)
            number += 1
            print("成功获取")

同时我们可以用@加属性名获取到对应标签的属性值。

 

 

#获取起点网前5页的书名以及其作者
import requests
import os
from lxml import etree

i=1
if not os.path.exists("123.txt"):
os.makedev("123.txt")
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}
number=1

for i in range(1,6):
url = f"https://www.qidian.com/all/page{i}/"
responds = requests.get(url, headers)#获取相应对象
print(responds.encoding)
html = responds.text#获取其str格式
tree=etree.HTML(html)#实例化etree对象,只有etree对象才能进行xpath操做
all_title=tree.xpath("//div[@class='book-mid-info']/h2/a/text()")#获取classbook-mid-infodiv下面的h2a标签的内容
all_info=tree.xpath("//p[@class='intro']/text()")
for title in all_title:
with open("ff.txt","a") as f:
print(f"{number}.{title}",file=f)
print(f"简介:{all_info[(number - 1) % 20]}",file=f)
number += 1
print("成功获取")