爬虫数据解析

BS4:

<html lang="en">
<head>
	<meta charset="UTF-8" />
	<title>测试bs4</title>
</head>
<body>
	<div>
		<p>百里守约</p>
	</div>
	<div class="song">
		<p>李清照</p>
		<p>王安石</p>
		<p>苏轼</p>
		<p>柳宗元</p>
		<a href="http://www.song.com/" title="赵匡胤" target="_self">
			<span>this is span</span>
		宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
		<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
		<img src="http://www.baidu.com/meinv.jpg" alt="" />
	</div>
	<div class="tang">
		<ul>
			<li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
			<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
			<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
			<li><a href="http://www.sina.com" class="du">杜甫</a></li>
			<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
			<li><b>杜小月</b></li>
			<li><i>度蜜月</i></li>
			<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
		</ul>
	</div>
</body>
</html>
from bs4 import BeautifulSoup
#fp就表示本地存储的一个html文件
fp = open('./test.html','r',encoding='utf-8')
#解析本地存储的html文件中的内容
#实例化BeautifulSoup对象,然后把即将被解析的页面源码数据加载到了该对象中
soup = BeautifulSoup(fp,'lxml') #参数2,lxml是固定形式,表示指定的解析器
#标签定位
#方式1:soup.tagName,只会定位到符合条件的第一个标签
tag1 = soup.title #定位到了title标签
tag2 = soup.div
#方式2:属性定位,find函数,findall函数
    #find('tagName',attrName='attrValue'):find只会定位到满足要的第一个标签
tag3 = soup.find('div',class_='song')#定位class属性值为song的div标签
tag4 = soup.find('a',id='feng')#定位id属性值为feng的a标签
    #findAll('tagName',attrName='attrValue'):可以定位到满足要求的所有标签
tag5 = soup.findAll('div',class_='song')
#方式3:选择器定位:soup.select('选择器')
    #id选择器:#feng  ----id为feng
    #class选择器:.song ----class为song
    #层级选择器:大于号表示一个层级,空格表示多个层级
tag6 = soup.select('#feng') #定位到所有id属性值为feng的标签
tag7 = soup.select('.song')#定位到所有class属性值为song的标签
tag8 = soup.select('.tang > ul > li') #定位到了class为tang下面的ul下面所有的li标签
tag9 = soup.select('.tang li')

#提取标签中的内容
#1.提取标签中间的内容:
    #tag.string:只可以提取到标签中直系的文本内容
    #tag.text:可以提取到标签中所有的文本内容
# p_tag = soup.p
# print(p_tag.string)
# print(p_tag.text)
# div_tag = soup.find('div',class_='song')
# print(div_tag.text)

#2.提取标签的属性值
    #tag['attrName']
img_tag = soup.img
print(img_tag['src']) #提取img标签的src的属性值

Xpath:

from lxml import etree #如果这种方式报错,使用下面方式导入etree
# from lxml.html import etree
fp = open('test.html','r')
#1.将本地存储好的文件中的数据加载到etree对象中进行数据解析
tree = etree.parse(fp)
#2.调用etree对象的xpath方法结合不同形式的xpath表达式进行标签定位和数据提取
#xpath返回的一定是列表,列表中存储的是定位到的标签对象
title_tag = tree.xpath('/html/head/title')
title_tag = tree.xpath('/html//title')
title_tag = tree.xpath('//head/title')
title_tag = tree.xpath('//title') #推荐
#最左侧为/:表示必须从树的根标签(html标签)开始进行定位
#最左侧为//:可以从任意位置进行标签的相对位置定位
#非最左侧的/:表示一个层级
#非最左侧的//:表示多个层级
tag = tree.xpath('//div') #定位所有的div标签

#属性定位:根据标签的属性定位标签
#//tagName[@attrName="attrValue"]
tag = tree.xpath('//div[@class="song"]')#定位class属性值为song的div标签
tag = tree.xpath('//a[@id="feng"]')
tag = tree.xpath('//div[@class="tang"]/ul/li/a[@id="feng"]')
#索引定位:索引是从1开始的
tag = tree.xpath('//div[@class="tang"]/ul/li[3]')#定位到第三个li标签
#获取定位到标签中的文本内容
    # /text()获取标签中直系的文本内容:返回的列表中只会有一个列表元素
    # //text()获取标签中所有的文本内容:通常返回列表中存在多个元素
tag = tree.xpath('//div[@class="song"]/p[3]/text()')
tag = tree.xpath('//div[@class="song"]//text()')
#获取定位到标签中的属性值://tag/@attrName
tag = tree.xpath('//img/@src')
print(tag)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值