关于lxml的笔记

关于lxml的笔记

解析dom
from lxml import etree
dom = etree.HTML(html)
查看节点内容
etree.tostring(dom[0])
获取节点标签名
dom[0].tag
获取节点的父节点
dom[0].getparent()
获取某节点的属性节点的内容
dom[0].get(‘属性名称’)

xpth路径
/ 代表根节点
// 代表任意节点
绝对路径 page.xpath("/html/body/p")
相对路径 pape.xpath("/p")
. 选取当前节点
… 选取当前节点的父节点
@ 选取属性

xpath筛选
选取元素时列表,可通过索引查找[n]
筛选元素p = page.xpath("//p[@style=‘font-size:200%’]")
没有属性可通过text()(获取元素中文本)、position()(获取元素位置)、last()等进行筛选

/book/book[1] 选取book元素的第一个book元素
/div/div[last()] 选取div元素的最后的一个div元素
/div/div[option()❤️] 选取最前面的两个属于div元素的div元素
//title[@lang] 选取拥有名为lang属性的title元素
//title[@lang=’ eng’] 选取所有title元素,且这些元素拥有为eng的lang属性
/div/div[price>35.0] 选取div元素的所有div元素,且其中的price元素的值必须大于35.0
/div/div[price]/title 选取div元素中div元素的所有tilte元素,且其中的price元素的值须大于35.0

获取属性值
dom.xpth(".//a/@href")
获取文本
dom.xpath(".//a/text()")

//获取HTML的body部分
HTMLNode *node = [parser body];

//在node的基础上,找到并取得总结的那段话
HTMLNode *sum=[node findChildOfClass:@"lotconts" ];//这个方法就是查找一个属性,名字叫"lotconts"的节点

//在node的基础上,找到并取获取有效日期
HTMLNode *effectdate=[node findChildOfClass :@"datea"];

//在node的基础上,找到并取获取星座名字
HTMLNode *name=[node findChildTag:@"span"];//这个方法就是查找一个标签叫"span"的节点 

//在node的基础上,找到并取获取星座时间段
  HTMLNode *time=[name findChildTag:@“em”];
//获取星座图片的链接
   HTMLNode *image=[node findChildTag:@“img”];
  NSString *pic=[image getAttributeNamed:@“src”];
  NSURL *url1=[NSURL URLWithString:pic];

// 得到节点的内容
[name contents];//返回的就是一个字符串 在这里内容就是:巨蟹座
//同理
[sum contents];//内容


使用xpath函数,函数()内填写xpath语法,完成提取
1、获取所有的div标签【节点选取】
divs = html.xpath(’//div’)
print(divs)

###因为上面div返回的结果为element。所以使用tostring进行打印内容
for div in divs:
d = etree.tostring(div,encoding=‘uttf-8’).decode(‘utf-8’)
print(d)
break ##这里是为了仅打印一个结果,去掉break打印全部div标签
print(’*’*50)

###xpath提取的数据返回的结果是一个列表,而列表无法使用etree中的函数进行操作
2、获取指定的某个div标签【谓语的作用】
div = html.xpath(’//div[1]’)[0]
print(etree.tostring(div,encoding=‘utf-8’).decode=(‘utf-8’))

3、获取所有的id=‘even’的div标签
divs = html.xpath(’//div[@id=“even”])

for div in divs:
d = etree.tostring(div,encoding=‘utf-8’).decode(‘utf-8’)
print(d)

4、获取标签的某个属性值
###获取所有的第v的id属性的值
divs = html.xpath(’//div/@id’)
print(divs)

###获取所有的a标签下的href属性的值
hrefs = html.xpath(’//a/@href’)
print(hrefs)

####/@可以用来获取属性的值

##所有的职位信息都存在第一个div标签中,div标签中除了的第一个以外的标签会含有我们想要的信息
5、获取div里面所有的职位信息
divs = html.xpath(//div)[1:]
#divs = html.xpath(’//div[position()>1]’)

divs = html.xpath(’//div’)[1:]
for div in divs:
d = etree.tostring(div,encoding=“utf-8”).decode(‘utf-8’)
print(d)

####获取数据以后,要提取重复的信息可以使用循环
for div in divs:
#获取标签href属性
url = div.xpath(’.//a/@href’)
#获取啊标签的文本信息
position = div.xpath(’.//a/text()’)
print(position)
break
####此时打印 的结果就是一个列表,修改一下
for div in divs:
#获取标签href属性
url = div.xpath(’.//a/@href’)[0]
#获取啊标签的文本信息
position = div.xpath(’.//a/text()’)[0]
print(position)
break
####这时打印的结果就是字符串了

6、存储信息
###获取div中的所有的信息
divs = html.xpath(’//div’)[1:]
work = []
for div in divs:
work = {}
#获取标签href的值
url = div.xpath(’.//a/@href’)[0]
#获取a标签的文本信息
position = div.xpath(.//a/@text()’)[0]
#获取工作类型
work_type = div.xpath(’’.//span[2]/text()’)[0]
#获取在职人数
work_num = div.xpath(’.//span[3]/text()’)[0]
#新建空字典,存储所有的信息
work = {
“url”:url,
“position”:position,
“work_type”:work_type,
“work__num”:work_num,
}
####for循环中的每一次结果添加至列表中
works.append(work)
href = div.tostring(div,encoding=‘utf-8’).decode(‘utf-8’)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,爬取京东等电商平台的销售数据通常需要使用到网络爬虫技术,结合一些第三方库如`requests`、`BeautifulSoup`或`Scrapy`框架。这里我将简述一个基本的步骤,但请注意实际操作可能需要遵守京东的使用条款和robots.txt协议,以及可能存在的反爬机制。 1. **安装必要的库**: 首先,你需要安装`requests`库来发送HTTP请求,`BeautifulSoup`或`lxml`用于解析HTML。 ```bash pip install requests beautifulsoup4 ``` 2. **获取网页源代码**: 使用`requests.get()`获取页面的HTML内容。假设我们想要抓取笔记本电脑列表页: ```python import requests from bs4 import BeautifulSoup url = "https://www.jd.com品类搜索.html?keyword=%E7%9B%AE%E8%AE%B0%E8%AE%BA" response = requests.get(url) html_content = response.text ``` 3. **解析HTML**: 使用`BeautifulSoup`解析HTML内容,找到包含销售信息的部分。由于京东的数据结构可能会变化,通常会寻找产品列表、销量等元素的class或id。 ```python soup = BeautifulSoup(html_content, 'lxml') sales_data = soup.find_all('div', class_='product-item-sales') # 假设销量在这一类别的元素中 ``` 4. **提取销售数据**: 对每个找到的销售数据元素,提取出销量信息。这可能需要进一步查找子元素并解析其文本。 ```python sales_numbers = [element.find('span', class_='J_salesNum')['data-value'] for element in sales_data] ``` 5. **处理和输出数据**: 最后,你可以将销量数据存储在一个列表或文件中,或者直接打印出来。 ```python for i, number in enumerate(sales_numbers): print(f"第{i+1}名:{number}") ``` 注意:这只是一个基础示例,实际爬取时可能需要处理分页、登录验证、动态加载内容等问题。同时,频繁抓取可能会被网站封禁,因此建议在合法范围内,并确保你的行为符合平台政策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值