今天给各位分享分析网站使用的源码分享的知识,其中也会对网站源码分类进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
从之前的内容中,我们知道了requests请求返回的内容是网页的源代码,而且对于前端的HTML代码有一点的初步的认识,但是很多的前端的页面少则几百行,多则几千行业也经常遇见,如果从这么多的内容中去寻找需要的内容,那么效率一定是很低,这里我们就需要借助网页解析工具包lxml和BeautifulSoup。它们可以将字符串格式的HTML页面转成相应的对象,然后我们可以配置一个规则,找到我们需要的内容。
XPath语法
lxml是Python的一个解析库,支持HTML和XML的解析,支持XPath(XMLPathLanguage)解析方式。XPath,它是一门在XML文档中查找信息的语言,具有自身的语法,是用来确定XML文档中某部分位置的语言,最初是用来搜寻XML文档的,当然也适用于HTML文档的搜索。通俗点讲就是lxml可以根据XPath表示的位置来确定HTML页面中的内容,从而实现找到我们需要的内容。
虽然XPath是需要学习相关的语法才可以知道怎么定位页面内容,不过XPath语法并不是学习的重点,现在的工具或者浏览器自带的工具可以辅助生成XPath的路径,方便快捷,大大提升了开发的效率。
XPath使用路径表达式来选取XML文档中的节点或节点集。节点是通过路径(path)或者步(steps)来选择。这个可以这么理解,比如说我们在表达我是来自某某地方的时候,很少直接说,我在XX区,这样让别人并没有一个位置的概念,通常用中国(<html>)XX省(<body>)XX市(<div>)XX区(<p>),XPath就是根据这种路径来选准确的元素。
如果你直接想要某一些元素,好比找到地名带“州”字的,也可以不需要从头开始,直接可以从<div>元素位置查找,可以根据<div>标签中特定的属性值来定位元素,但是这种写法通常是一个结果集。
XPtah规则
下面图中是常用的XPath路径中的表达式。
表达式
含义
/
从当前节点选取子节点
//
从当前节点选取子孙节点
.
选取当前节点
..
选取当前节点的父节点
@
选取属性
*、d、+…
通配符,XPtah中可以使用正则表达式
[@attribute]
选取具有此属性的所有元素
[@attribute=&39;]
选取此属性值为value的所有元素
[tag]
选取所有具有指定元素的直接子节点
安装LXML
安装库可以直接使用pip安装,安装命令:
>>>pipinstalllxml\nLookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simple\nCollectinglxml\n……\nlxml-4.6.2-cp39-cp39-win_amd64.whl(3.5MB)\nInstallingcollectedpackages:lxml\nSuccessfullyinstalledlxml-4.6.2
Pip默认下载源是国外的服务器,我们可以修改成国内的下载源。在window系统中最快捷的方法是,在C盘的当前用户目录下:C:\\Users\\用户名,创建一个pip的文件下,在文件中编写文件pip.ini,文件中设置下载源地址,这样我们可以快速下载和安装库。
[global]\ntimeout=6000\nindex-url=https://pypi.tuna.tsinghua.edu.cn/simple\ntrusted-host=pypi.tuna.tsinghua.edu.cn
生成解析对象
首先创建一个简单的HTML示例的字符串:
fromlxmlimportetree\ntext=&39;&34;c1&34;link1.html&34;链接1&34;c2&34;link2.html&34;链接1&34;c3&34;link3.html&34;链接1&39;&39;\n对象类型\nprint(type(selector))\n39;lxml.etree._Element&39;//*[@class=&34;]/a&代码结果:\n<class&39;>\n[<Elementaat0x21b4afc51c0>]
XPath选择后得到的是一个元素的list,即便是这个list中只有一个元素。但是在实际操作过程中,我们拿到并不能到这个a标签的对象就完成了,要么是需要a标签的文本,要么就是a标签中的属性。
通过XPath选择class为c1的任意标签下的a标签中的链接和文本
link=selector.xpath(&34;c1&39;)\ntext=selector.xpath(&34;c1&39;)\nprint(link)\nprint(text)\n39;link1.html&39;第一个链接&34;c1&39;//*[@class=&34;]/a/@title&代码结果:\n[&39;]
通常情况下,我们都会把一个HTML中的某个div下的所有链接获取下来,那怎么办呢?
links=selector.xpath(&39;)\nprint(links)\n39;link1.html&39;link2.html&39;link3.html&34;screening&34;ui-slide-item&34;流浪地球2&34;2023&34;8.2&34;45&34;https://movie.douban.com/subject/35267208/trailer&34;https://movie.douban.com/ticket/redirect/?movie_id=35267208&34;173分钟&34;中国大陆&34;郭帆&34;吴京/刘德华/李雪健&34;&34;true&34;992124&34;&34;poster&34;moreurl(this,{from:&39;})&34;https://movie.douban.com/subject/35267208/?from=showing&34;https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2885955777.webp&34;流浪地球2&34;nofollow&34;&34;title&34;moreurl(this,{from:&39;})&34;https://movie.douban.com/subject/35267208/?from=showing&34;&34;rating&34;rating-starallstar45&34;subject-rate&34;ticket_btn&34;moreurl(this,{from:&39;})&34;https://movie.douban.com/ticket/redirect/?movie_id=35267208&34;_blank&39;https://movie.douban.com/&设置请求头\nheaders={\n&39;:&39;\n}\n初始化生成一个XPath解析对象\nselector=etree.HTML(response.text)\n34;/html/body/div[3]/div[1]/div/div[2]/div[2]/div[2]//img/@alt&39;蚁人与黄蜂女:量子狂潮&39;中国乒乓之绝地反击&39;流浪地球2&39;满江红&39;深海&39;黑豹2&39;无名&39;不能流泪的悲伤&39;风再起时&39;熊出没·伴我“熊芯”&39;交换人生&39;冥绝村&39;想见你&39;可不可以不要离开我&39;阿凡达:水之道&39;极速保镖&39;穿靴子的猫2&39;胡杨林之恋&39;六尺巷&34;//*[@id=&39;]/div[2]//img/@alt”)\nprint(links)
运行结果也同样成功获取到想要的内容,可见XPath是一个路径的表达方式,可以用绝对路径也可以用相对路径。不过由浏览器的工具,我们不需要完整的从零开始写,只需要根据浏览器提供的路径进行改造和加工即可的到我们想要的内容。
好了,关于分析网站使用的源码分享和网站源码分类的问题到这里结束啦,希望可以解决您的问题哈!
