三.Xpath语法验证
在开发者工具的 Elements 中按Ctrl + F,在搜索框中输入 Xpath
四.lxml的基本使用
# 导入模块 from lxml import etree # html源代码 web_data = """ <div> <ul> <li class="item-0"><a href="link1.html">first item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-inactive"><a href="link3.html">third item</a></li> <li class="item-1"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a> </ul> </div> """ # 将html转成xml文件 element = etree.HTML(web_data) # print(element) # 获取li标签下面的a标签的href links = element.xpath('//ul/li/a/@href') print(links) # 获取li标签下面的a标签的文本数据 result = element.xpath('//ul/li/a/text()') print(result)
五.Xpath实战(含流程)
import requests from lxml import etree ''' 目标:熟悉xpath解析数的方式 需求:爬取电影的名称 评分 引言 详情页的url 翻页爬取1-10页 保存到列表中 如何实现? 设计技术与需要的库 requests lxml(etree) 实现步骤 1 页面分析(一般讲数据解析模块 都是静态页面) 1.1 通过观察看网页源代码中是否有我们想要的数据 如果有就分析这个url 如果没有再通过ajax寻找接口 通过分析数据在网页源代码中 1.2 确定目标url https://movie.douban.com/top250?start=0&filter= 第一页 通过页面分析发现所有我们想要的数据都在一个div[class="info"]里面 具体实现步骤 1 获取整个网页的源码 html 2 将获取的数据源码转成一个element对象(xml) 3 通过element对象实现xpath语法 对数据进行爬取(标题 评分 引言 详情页的url) 4 保存数据 先保存到字典中-->列表中 ''' # 定义一个函数用来获取网页源代码 def getsource(pagelink): # 请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36' } # 获取源码 response = requests.get(pagelink, headers=headers) response.encoding = 'utf-8' html = response.text return html # 定义一个函数用于解析我们的网页源代码并获取我们想要的数据 def geteveryitem(html): element = etree.HTML(html) # 拿到[class="info"]的所有div movieitemlist = element.xpath('//li//div[@class="info"]') # print(movieitemlist,len(movieitemlist)) # 定义一个列表 itemlist = [] for item in movieitemlist: # 定义一个字典 itemdict = {} # 标题 title = item.xpath('./div[@class="hd"]/a/span[@class="title"]/text()') title = "".join(title).replace("\xa0", "") # print(title) # 副标题 othertitle = item.xpath('./div[@class="hd"]/a/span[@class="other"]/text()')[0].replace("\xa0", "") # print(othertitle) # 评分 grade = item.xpath('./div[@class="bd"]/div[@class="star"]/span[2]/text()')[0] # print(grade) # 详情页的url link = item.xpath('div[@class="hd"]/a/@href')[0] # print(link) # 引言 quote = item.xpath('div[@class="bd"]/p[@class="quote"]/span/text()') # print(quote) # list index out of range # 处理方式1 非空处理 if quote: quote = quote[0] else: quote = "" # 将数据存放到字典中 itemdict['title'] = ''.join(title + othertitle) itemdict['grade'] = grade itemdict['link'] = link itemdict['quote'] = quote # print(itemdict) itemlist.append(itemdict) # print(itemlist) return itemlist if __name__ == '__main__': url = 'https://movie.douban.com/top250?start=0&filter=' html = getsource(url) itemlist = geteveryitem(html) print(itemlist)
今天的分享到这里就结束了,感谢各位大大的观看,各位大大的三连是博主更新的动力,感谢谢谢谢谢谢谢谢谢各位的支持!!!!!