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页的书名以及其作者标签:info,lxml,etree,title,python,number,爬虫,print From: https://www.cnblogs.com/Curitaos/p/17605630.html
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("成功获取")