ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python爬虫之lxml解析页面元素

2021-05-13 10:03:36  阅读:215  来源: 互联网

标签:xpath lxml span code Python app 爬虫 html names


目录

一. 用lxml.etree 解析string为html格式

1、如果是用webdriver获取的页面源码,直接将源码字符串解析成html, 用etree.HTML()

from selenium import webdriver
from lxml import etree

url = "https://appexchange.salesforce.com/appxStore"
browser = webdriver.Chorme()
browser.get(url)
page_code = browser.page_source

html_code = etree.HTML(page_code) # 将page_code 字符串解析成html

app_names_xpath = '//*[@id="appx-table-results"]/li[*]/a/span[2]/span[2]/span[1]/span[2]/span[1]'
app_names = html_code.xpath(app_names_xpath)
# 这里返回的app_names 是一个列表, 里面存储着所有匹配的选项,如果没有的话列表就为空
print(app_names[0].text)

2、如果是直接解析一个html文件: 使用etree.parse()

html_code = etree.parse("demo.html", etree.HTMLParser())

二. etree 与 Xpath

1、在chrome中在页面选择元素可以直接以xpath复制地址

2、html_code.xpath(xpath) 定位后返回的是一个列表,元素定位为空的时候列表返回为空

app_names_xpath = '//*[@id="appx-table-results"]/li[*]/a/span[2]/span[2]/span[1]/span[2]/span[1]'
app_names = html_code.xpath(app_names_xpath)
# 这里返回的app_names 是一个列表, 里面存储着所有匹配的选项,如果没有的话列表就为空
# text返回的是定位元素的文本内容
print(app_names[0].text)

定位有两种形式:
① 一种就是上面的定位元素,然后调用元素文本内容;
② 还有一种就是直接在定位元素的时候, 带上具体内容如:

# 第一种形式: 
app_names_xpath = '//*[@id="appx-table-results"]/li[*]/a/span[2]/span[2]/span[1]/span[2]/span[1]'
app_names = html_code.xpath(app_names_xpath)
print(app_names[0].text)

第二种形式:
app_names_xpath = '//*[@id="appx-table-results"]/li[*]/a/span[2]/span[2]/span[1]/span[2]/span[1]/text()'
app_names = html_code.xpath(app_names_xpath)
print(app_names[0])

3、如果需要元素内的标签内容,如href等:

# 沿用上面的第二种形式:获取class属性的内容
ratings_path = '/html/body/div[1]/div[1]/div[1]/div/div/span[2]/div/ul/li[1]/a/span[1]/span[3]/span[2]/span[1]/span/span/@class'
rating = html_code.xpath(ratings_path)
print(rating[0])

4、获取网站某个元素的xpath路径

选取对应的元素, 右键copy -》copy xpath

标签:xpath,lxml,span,code,Python,app,爬虫,html,names
来源: https://blog.csdn.net/engelman/article/details/116714792

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有