9、爬虫-xpath-selenium爬取网页隐藏元素
安装:pip install lxml
1、导入:from lxml import etree
2、创建对象:
tree = etree.XML(xml文件)
tree = etree.HTML(html文件)
等
3、找标签:
tree.xpath("//book/name/text()")
4、语法:
text()表示取节点标记的文字
tree.xpath("//book/publisher[3]/text()") #因为这里有四个相同的 <publisher> 节点 [下标索引取值]、xpath的下标索引从 1 开始、而不是0
通过标签的属性来取文字 : 标签[@属性="属性值"] tree.xpath("/books/book[2]/li/a[@href='shux']/text()")
取属性的值:@属性 --如:tree.xpath("/books/book[2]/li/a/@href")
tree.xpath("./publisher[3]/text()") #./ 表示相对查找、表示从当前开始查找
""" 使用xpath解析html文本 """ from lxml import etree xml = """ <books> <!-- 这是 xml 注释 --> <book id="SN9787302575443"> <!-- book 标签描述一本图书 id 属性描述 的是图书 的编号 --> <name>Java 2实用教程(第6版)</name> <!-- name 标签描述 的是图书 的信息 --> <author>耿祥义、张跃平</author> <!-- author 单词是作者的意思 ,描述图书作者 --> <publisher>清华大学出版社</publisher> <!--publisher 单词是出版社的意思,描述图书的出版社--> <publisher>清华大学出版社2</publisher> <!--publisher 单词是出版社的意思,描述图书的出版社--> <publisher>清华大学出版社3</publisher> <!--publisher 单词是出版社的意思,描述图书的出版社--> <publisher>清华大学出版社4</publisher> <!--publisher 单词是出版社的意思,描述图书的出版社--> <price>65</price> <!-- price 单词是价格,描述的是图书 的价格 --> </book> <book id="SN9787020122172"> <!-- book 标签描述一本图书 id 属性描述 的是图书 的编号 --> <name>骆驼祥子</name> <!-- name 标签描述 的是图书 的信息 --> <author>老舍</author> <!-- author 单词是作者的意思 ,描述图书作者 --> <publisher>人民文学出版社</publisher> <!--publisher 单词是出版社的意思,描述图书的出版社--> <price>20.20</price><!-- price 单词是价格,描述的是图书 的价格 --> <li><a href="shux">属性值</a></li> </book> </books> """ #创建对象、指定解析XML文本 tree = etree.XML(xml) #查找Java 2实用教程(第6版) 和 骆驼祥子 文字 #这里按照节点来一层一层取查找 //表示 从匹配选择的当前节点选择文档中的节点 #text() 表示拿到接待你标记的文字 result1 = tree.xpath("//book/name/text()") #//也可表示包含所有节点 result2 = tree.xpath("//book//publisher/text()") #这里的*表示通配符,包含所有节点的意思 result3 = tree.xpath("//book/*/text()") #取清华大学出版社3、可以通过下标索引来取 [3] result4 = tree.xpath("//book/publisher[3]/text()") #因为这里有四个相同的 <publisher> 节点 #取a标签里的属性值为shux的文字、通过标签的属性来取文字 标签[@属性="属性值"] result5 = tree.xpath("/books/book[2]/li/a[@href='shux']/text()") #取属性的值:href的值 result6 = tree.xpath("/books/book[2]/li/a/@href") print(result1) print(result2) print(result3) print(result4) print(result5) print(result6)
案例
""" 使用xpath捞取猪八戒网络里的saas平台商家信息 网站:https://www.zbj.com/fw/?k=saas 拿到价格、标题、所在城市、店铺名 """ import requests from lxml import etree url = "https://www.zbj.com/fw/?k=saas" #拿到html文本 response = requests.get(url) print(response.text) #创建xpath的html对象 html_file = etree.HTML(response.text) #先取第一层 html_one = html_file.xpath('//*[@id="__layout"]/div/div[3]/div/div[4]/div/div[2]/div[1]/div') #取每一个店铺的商家名 for html in html_one: #店铺名 storeshop = html.xpath("./div/a/div[2]/div/div/text()") #价格 price = html.xpath('./div/div[@class="bot-content"]/div[@class="price"]/span/text()') #服务、标题 server_name = html.xpath('./div/div[@class="bot-content"]/div[@class="name-pic-box"]/a/text()') #所在地 address = html.xpath('./div/div[@class="card-box"]/a/div[@class="bot-content bot-evalue" and not(@style="display: none;")]/div[@class="tabstwo"]/span[2]/text()') print(f"店铺:{storeshop} 所在地:{address} 服务:{server_name} 价格:{price}") #注意这里的所在地由于在源码中是被隐藏的:display:none属性的、所以使用requests是获取不到的、得使用selenium中的webdriver.Chrom才能获取到完整得html源码
如下:使用selenium库获取html中被隐藏得标签的值
from selenium import webdriver from lxml import etree # 创建一个浏览器对象 driver = webdriver.Chrome() # 这里使用Chrome浏览器,您也可以选择其他浏览器 # 使用浏览器加载网页 driver.get('https://www.zbj.com/fw/?k=saas') # 替换为您要访问的网址 # 等待页面加载完成(可选) # 如果页面中包含动态内容,您可能需要等待一些时间,以确保所有内容都加载完成 # 例如,可以使用以下代码等待5秒钟: # import time # time.sleep(5) # 获取完整的HTML代码 html = driver.page_source # 关闭浏览器 driver.quit() #print(html) # 处理HTML代码 # 在这里,您可以使用lxml或其他库来解析和提取所需的内容 html_file = etree.HTML(html) #先取第一层 html_one = html_file.xpath('//*[@id="__layout"]/div/div[3]/div/div[4]/div/div[2]/div[1]/div') #取每一个店铺的商家名 for html in html_one: #店铺名 storeshop = html.xpath("./div/a/div[2]/div/div/text()") #价格 price = html.xpath('./div/div[@class="bot-content"]/div[@class="price"]/span/text()') #服务、标题 server_name = html.xpath('./div/div[@class="bot-content"]/div[@class="name-pic-box"]/a/text()') #所在地 address = html.xpath('./div/div[@class="card-box"]/a/div[2]/div[@class="tabstwo"]/span[2]/text()') print(f"店铺:{storeshop} 所在地:{address} 服务:{server_name} 价格:{price}")
标签:
python爬虫
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了