爬虫基础(三)xpath

xpath语法

		/		# 从根节点选取
		//		# 从匹配选择的当前节点选择文档中的节点、而不考虑特们的位置
		.		# 选取当前节点
		..		# 选取当前节点的父节点
		@		# 选取

查找某个特定节点或包含某个特定值的节点

		/bookstore/book[1]		# 选取属于bookstore子元素的第一个book元素
		/bookstore/book[last()] # 选取属于bookstore子元素的最后一个book元素
		/bookstore/book[last()-1]  # 选取属于bookstore子元素的倒数第二个book元素
		/bookstore/book[position()<3]  #  选取最前⾯的两个属于 bookstore 元素的⼦元素的 book 元素
		//title[@lang]   # 选取所有拥有名为 lang 的属性的title 元素
		//title[@lang='eng'] # 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性
		/bookstore/book[price>35.00]  # 选取 bookstore 元素的所有 book元素,且其中的 price 元素的值须⼤于 35.00

选取未知节点

		*		# 匹配任何元素节点
		@*		# 匹配任何属性节点
		node()	# 匹配任何类型的节点

		/bookstore/*	#选取bookstore元素的所有子元素
		//*		# 选取文档中的所有元素
		html/node()/meta/@*  # 选择html下⾯任意节点下的meta节点的所有属性
		//title[@*]		# 选取所有带有属性的 title 元素	

lxml库

		"""
		lxml 是一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML数据
		利用etree.HTML,将字符串转化为Element对象
		lxml可自动修正html代码
		"""
		from lxml import etree
		html = etree.HTML(text)  # 将字符串转化为 Element对象
		print(etree.tostring(html).decode())  # 查看Element对象中包含字符串		

爬虫案例

from lxml import etree
import requests

class BsSpider(object):

	def __init__(self):  # url地址
		self.url = "http://budejie.com/{}"
		self.header = {'User-Agent':....}

	def get_url_list(self):
		for page in range(1,10):
			new_url = self.url.format(page)
			url_list.append(new_url)
		return url_list
		# return [self.url.format(page) for page in range(1,10)]
	
	def parse_url(self,url):
		return requests.get(url,headers = self.header).text

	def get_data_list(self,html_str):
		html = etree.HTML(html_str)
		li_list = html.xpath('//div[@class="j-r-list"]/ul/li')
		content_list = []
		for li in li_list:
			item = {}
			item['username'] = li.xpath("./div/divp[@class='u-txt']/a/text()")
			item['comment'] = li.xpath("./div/divp[@class='j-r-list-c-desc']/a/text()")[0]
			content_list.append(item)
		return content_list

	def save_content(self,content_list):
		print(content_list)
		
		
	def run(self):  #    主函数
		# 构造URL列表
		url_list = self.get_url_list()
		# 遍历URL,发送请求,获取响应
		for url in url_list:
			html = self.parse_url(url)
		# xpath 提取数据
			content_list = self.get_data_list(html)
		# 保存
			self.save_content(content_list)
	

if __name__ == '__main__':
	bs = BsSpider()
	bs.run()
发布了50 篇原创文章 · 获赞 3 · 访问量 1797

猜你喜欢

转载自blog.csdn.net/weixin_43056654/article/details/104155120