python3 库,python的解析库
Lxml是一个python解析库,支持HTML和xml解析,XPath解析,解析效率很高。
Python3解析库lxml
阅读目录
1、python库lxml的安装2、常见的XPath规则(1)读取文本解析节点(2)读取HTML文件进行解析(3)获取所有节点(4)获取子节点(5)获取父节点(6)属性匹配(7)文本获取(8)属性获取(9)属性多值匹配(10)多属性匹配(11)XPath中的运算符(12)按排名开发语言Lxml是python的一个解析库,支持HTML和xml解析,XPath解析,解析效率非常
XPath,全称XML Path Language,是XML路径语言。它是一种在XML文档中搜索信息的语言。它最初用于搜索XML文档,但也适用于搜索HTML文档。
XPath的选择功能非常强大。它提供了一个非常简洁的路径选择表达式。此外,它还提供了100多个内置函数,用于匹配字符串、值、时间,以及处理节点和序列。几乎所有我们想要定位的节点都可以被XPath选择。
XPath在1999年11月16日成为W3C标准。它是为XSLT、XPointer和其他XML解析软件设计的。更多文件可以在它的官方网站上找到:https://www.w3.org/TR/xpath/.
1.windows系统下python库lxml的安装:
#pip安装
pip3安装lxml
#车轮安装
#下载相应系统版本的车轮文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
pip3安装lxml-4 . 2 . 1-cp36-cp36m-win _ amd64 . whl
在linux下安装:
yum install-y epel-release libxslt-devel libxml 2-devel OpenSSL-devel
3 pip3安装lxml验证安装:
$python3
导入lxml
2.XPath通用规则表达式
形容
节点名
选择此节点的所有子节点。
/
从当前节点中选择一个直接子节点。
//
从当前节点中选择后代节点。
选择当前节点
.
选择当前节点的父节点
@
选择属性
*
通配符,选择所有元素节点和元素名称。
@*
选择所有属性
[@attrib]
选择具有给定属性的所有元素。
[@attrib=value]
选择具有给定属性值的所有元素。
[标签]
选择具有指定元素的所有直接子节点。
[tag=text]
选择具有指定元素的所有节点,文本内容为文本。
(1)读取文本解析节点
从lxml导入etree
text=
第一
第二项
属性
Html=etree。HTML(text) # Initialize生成XPath解析对象
Result=etree.tostring (HTML,encoding= UTF-8) #解析对象输出代码
打印(类型(html))
打印(类型(结果))
print(result.decode(utf-8 ))
#etree将修复HTML文本节点。
第一
第二项
属性
(2)读取HTML文件进行解析
从lxml导入etree
HTML=etree.parse (test.html ,etree.htmlparser ()) #指定解析器htmlparser将根据文件修复HTML文件中缺少的声明等信息。
结果=etree.tostring(html) #被解析为字节
# result=etree . tostringlist(HTML)#解析到列表中
打印(类型(html))
打印(类型(结果))
打印(结果)
#
b\n
\n第一项
\n第二个项目
\n第三项
\n第四项
\n第五项
\n
(3)获取所有节点返回的列表。每个元素都是元素类型,所有节点都包含在其中。
从lxml导入etree
html=etree.parse(test ,etree。HTMLParser())
Result=html.xpath(//*) #//代表获取后代节点,*代表获取全部
打印(类型(html))
打印(类型(结果))
打印(结果)
#
[, , ]
要获得li节点,可以使用//后跟节点名,然后调用xpath()方法。
Html.xpath(//li) #获取所有后代节点的li节点
(4)获取子节点。您可以通过/或//找到元素的子节点或后代。如果要选择li节点的所有直接A节点,可以使用此方法。
Result=html.xpath(//li/a) #通过追加/a选择所有li节点的所有直接A节点,因为//li用于选择所有li节点,/a用于选择li节点的所有直接子节点A。
(5)获取父节点。我们知道可以通过连续的/或//找到子节点或后代节点,所以我们可以使用.查找父节点或parent:获取父节点。
从lxml导入etree
从lxml.etree导入HTMLParser
text=
第一
第二项
html=etree。HTML(文本,etree。HTMLParser())
result=html . XPath(//a[@ href= link 2 . html ]/./@ class’)
result 1=html . XPath(//a[@ href= link 2 . html ]/parent:*/@ class )
打印(结果)
打印(结果1)
#
[项目-1]
[项目-1]
(6)属性匹配在选择时,我们也可以使用@符号进行属性筛选。例如,在这里,如果您想要选择其类别为item-1的li节点,您可以这样做:
从lxml导入etree
从lxml.etree导入HTMLParser
text=
第一
第二项
html=etree。HTML(文本,etree。HTMLParser())
result=html.xpath(//li[@ ])
打印(结果)
(7)文本获取我们使用XPath中的text()方法获取节点中的文本。
从lxml导入etree
text=
第一
第二项
html=etree。HTML(文本,etree。HTMLParser())
result=html . XPath(//Li[@]/a/text())#获取节点a下的内容。
1=html . XPath(//li[@]//text())#获取Li下所有后代节点的内容。
打印(结果)
打印(结果1)
(8)属性获取使用@符号获取节点的属性,如下:获取所有li节点下所有A节点的href属性。
result=html . XPath(//Li/a/@ href )#获取a的href属性。
result=html . XPath(//li//@ href )#获取Li所有子节点的href属性。
(9)属性多值匹配如果一个属性有多个值,我们可以用contains()函数来获取。
从lxml导入etree
text1=
第一
第二项
html=etree。HTML(text1,etree。HTMLParser())
result=html . XPath(//Li[@]/a/text())
result 1=html . XPath(//Li[contains(@ class, aaa)]/a/text())
打印(结果)
打印(结果1)
#第一种方法得不到任何值,contains()可以精确匹配节点。
[]
[第一个]
(10)多属性匹配另外,我们可能会遇到根据多个属性确定一个节点的情况。这时候就需要同时匹配多个属性。这时,可以用和运算符来连接:
从lxml导入etree
text1=
第一
第二项
html=etree。HTML(text1,etree。HTMLParser())
result=html . XPath(//Li[@ and @ name= fore ]/a/text())
result 1=html . XPath(//Li[contains(@ class, aaa) and @name=fore]/a/text())
打印(结果)
打印(结果1)
#
[第二项]
[第二项]
(11)XPath运算符中的运算符
形容
例子
返回值
或者
或者
年龄=19或年龄=20
如果年龄等于19或20,则返回true,但无论如何都会返回false。
和
和
19岁和21岁
如果年龄等于20,则为True,否则为false。
现代的
接管
5模块2
一个
取两个节点的集合
//book //cd
返回包含book和cd元素的所有节点的集合。
增加
6 4
10
-
负的
6-4
2
*
多样地
6*4
24
差异
分开
8区4
2
=
胜任
年龄=19岁
真实的
!=
不等于
年龄!=19
真实的
不到
19岁
真实的
=
小于或等于
年龄=19岁
真实的
比.更大
19岁
真实的
=
大于或等于
年龄=19岁
真实的
本表参考资料来源:http://www.w3school.com.cn/xpath/xpath_operators.asp
(12)按顺序选择有时候我们在选择的时候,有些属性可能同时匹配多个节点,但是我们只想要其中的一个,比如第二个节点或者最后一个节点。此时,我们可以使用括号引入索引,以特定的顺序获取节点:
从lxml导入etree
text1=
第一
第二
第三
第四
html=etree。HTML(text1,etree。HTMLParser())
result=html . XPath(//li[contains(@ class, AAA)]/a/text ()) #获取所有Li节点下节点A的内容
result=html . XPath(//Li[1][contains(@ class, AAA)]/a/text ()) #获取第一个
result=html . XPath(//Li[last()][contains(@ class, AAA)]/a/text ()) #获取最后一个
result=html . XPath(//Li[position()2和position () 4] [contains (@ class, AAA)]/a/text ()) #获取第一个
result=html . XPath(//Li[last()-2][contains(@ class, AAA)]/a/text ()) #获取倒数第三个
打印(结果)
打印(结果1)
打印(结果2)
打印(结果3)
打印(结果4)
#
[第一,第二,第三,第四]
[第一个]
[第四]
[第三]
[秒]
这里使用了last()和position()函数。XPath中提供了100多个函数,包括访问、数值、字符串、逻辑、节点、序列等处理函数。关于它们的具体功能,请参考http://www.w3school.com.cn/xpath/xpath_functions.asp.
(13)节点轴选择XPath提供了很多节点选择方法,包括获取子元素、兄弟元素、父元素、祖先元素等。例子如下:
从lxml导入etree
text1=
第一
第二
第三
第四
html=etree。HTML(text1,etree。HTMLParser())
result=html . XPath(//Li[1]/ancestor:*)#获取所有祖先节点
1=html . XPath(//Li[1]/ancestor:div )#获取div祖先节点
2=html . XPath(//Li[1]/attribute:*)#获取所有属性值
result=html . XPath(//Li[1]/child:*)#获取所有直接子节点
result=html . XPath(//Li[1]/descendant:A )#获取所有后代节点的A节点
result=html . XPath(//Li[1]/following:*)#获取当前子节之后的所有节点
result=html . XPath(//Li[1]/following-sibling:*)#获取当前节点的所有同级节点
#
[, ]
[]
[aaa , item]
[]
[]
[, ]
[, ]
以上是XPath axis的用法。关于轴的更多用法,请参考:http://www.w3school.com.cn/xpath/xpath_axes.asp
(14)案例应用:抓取TIOBE指数排名前20的开发语言。
#!/usr/bin/env python
#编码:utf-8
导入请求
从requests.exceptions导入请求异常
从lxml导入etree
从lxml.etree导入语法分析错误
导入json
定义一个页面(html):
标题={
用户代理: Mozilla/5.0(Windows NT 10.0;Win64x64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/67 . 0 . 3396 . 62 Safari/537.36
}
尝试:
response=requests.get(html,headers=headers)
Body=response.text #获取网页内容
除了RequestException作为e:
打印(请求是错误!,e)
尝试:
HTML=etree.html(body,etree.htmlparser ()) #解析HTML文本内容
result=html . XPath(//table[contains(@ class, table-top 20 )]/tbody/tr//text())#获取列表数据
位置=0
对于范围内的I(20):
如果i==0:
产出结果[i:5]
否则:
Yield result[pos:pos 5] #返回排名生成器数据。
pos=5
除了ParseError为e:
打印(电子位置)
Write _ file (data): #将数据重新组装成字典,写入文件并输出。
对于i in数据:
sul={
2018年6月排名: i[0],
2017年排名6 :I[1],
开发语言:i[2],
评级:i[3],
“变化率”:i[4]
}
with open(test.txt , a ,encoding=utf-8) as f:
必须对数据进行格式化
f.close()
打印(sul)
不返回
def main():
URL= https://www . TiO be . com/TiO be-index/
数据=一页到一页(url)
revaule=write_file(data)
如果revaule==None:
打印(“确定”)
if __name__==__main__ :
主()
#
{ 2018年6月排名: 1 , 2017年6月排名: 1 ,开发语言: Java ,评分: 15.368% ,变化率: 0.88%}
{ 2018年6月排名: 2 , 2017年6月排名: 2 ,开发语言: C ,评分: 14.936% ,变化率: 8.09%}
{ 2018年6月排名: 3 , 2017年6月排名: 3 ,开发语言: C ,评分: 8.337% ,变化率: 2.61%}
{ 2018年6月排名: 4 , 2017年6月排名: 4 ,开发语言: Python ,评分: 5.761% ,变化率: 1.43%}
{ 2018年6月排名: 5 , 2017年6月排名: 5 ,开发语言: C# ,评级: 4.314% ,变化率: 0.78%}
{ 2018年6月排名: 6 , 2017年6月排名: 6 ,开发语言: Visual Basic。净值,评级: 3.762% ,变化率: 0.65%}
{ 2018年6月排名: 7 , 2017年6月排名: 8 ,开发语言: PHP ,评级: 2.881% ,变化率: 0.11%}
{ 2018年6月排名: 8 , 2017年6月排名: 7 ,开发语言: JavaScript ,评分: 2.495% ,变化率:-0.53%}
{ 2018年6月排名: 9 , 2017年6月排名:-,开发语言: SQL ,评级: 2.339% ,变化率: 2.34%}
{ 2018年6月排名: 10 , 2017年6月排名: 14 ,开发语言: R ,评分: 1.452% ,变化率:-0.70%}
{ 2018年6月排名: 11 , 2017年6月排名: 11 ,开发语言: Ruby ,评分: 1.253% ,变化率:-0.97%}
{ 2018年6月排名: 12 , 2017年6月排名: 18 ,发展语言:目标-C ,评级: 1.181% ,变化率:-0.78%}
{ 2018年6月排名: 13 , 2017年6月排名: 16 ,开发语言: Visual Basic ,评级: 1.154% ,变化率:-0.86%}
{ 2018年6月排名: 14 , 2017年6月排名: 9 ,开发语言: Perl ,评级: 1.147% ,变化率:-1.16%}
{ 2018年6月排名: 15 , 2017年6月排名: 12 ,开发语言: Swift ,评级: 1.145% ,变化率:-1.06%}
{ 2018年6月排名: 16 , 2017年6月排名: 10 ,开发语言:汇编语言,评级: 0.915% ,变化率:-1.34%}
{ 2018年6月排名: 17 , 2017年6月排名: 17 ,开发语言: MATLAB ,评级: 0.894% ,变化率:-1.10%}
{ 2018年6月排名: 18 , 2017年6月排名: 15 ,开发语言: Go ,评分: 0.879% ,变化率:-1.17%}
{ 2018年6月排名: 19 , 2017年6月排名: 13 ,开发语言: Delphi/Object Pascal , rating: 0.875% ,变化率:-1.28%}
{ 2018年6月排名: 20 , 2017年6月排名: 20 ,开发语言: PL/SQL ,评级: 0.848% ,变化率:-0.72%}
关于XPath的更多用法参考:http://www.w3school.com.cn/xpath/index.asp
有关python lxml库的更多使用参考:http://lxml.de/
阅读目录
1、python库lxml的安装2、常见的XPath规则(1)读取文本解析节点(2)读取HTML文件进行解析(3)获取所有节点(4)获取子节点(5)获取父节点(6)属性匹配(7)文本获取(8)属性获取(9)属性多值匹配(10)多属性匹配(11)XPath中的运算符(12)按排名开发语言Lxml是python的一个解析库,支持HTML和xml解析,XPath解析,解析效率非常
XPath,全称XML Path Language,是XML路径语言。它是一种在XML文档中搜索信息的语言。它最初用于搜索XML文档,但也适用于搜索HTML文档。
XPath的选择功能非常强大。它提供了一个非常简洁的路径选择表达式。此外,它还提供了100多个内置函数,用于匹配字符串、值、时间,以及处理节点和序列。几乎所有我们想要定位的节点都可以被XPath选择。
XPath在1999年11月16日成为W3C标准。它是为XSLT、XPointer和其他XML解析软件设计的。更多文件可以在它的官方网站上找到:https://www.w3.org/TR/xpath/.
1.windows系统下python库lxml的安装:
#pip安装
pip3安装lxml
#车轮安装
#下载相应系统版本的车轮文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
pip3安装lxml-4 . 2 . 1-cp36-cp36m-win _ amd64 . whl
在linux下安装:
yum install-y epel-release libxslt-devel libxml 2-devel OpenSSL-devel
3 pip3安装lxml验证安装:
$python3
导入lxml
2.XPath通用规则表达式
形容
节点名
选择此节点的所有子节点。
/
从当前节点中选择一个直接子节点。
//
从当前节点中选择后代节点。
选择当前节点
.
选择当前节点的父节点
@
选择属性
*
通配符,选择所有元素节点和元素名称。
@*
选择所有属性
[@attrib]
选择具有给定属性的所有元素。
[@attrib=value]
选择具有给定属性值的所有元素。
[标签]
选择具有指定元素的所有直接子节点。
[tag=text]
选择具有指定元素的所有节点,文本内容为文本。
(1)读取文本解析节点
从lxml导入etree
text=
第一
第二项
属性
Html=etree。HTML(text) # Initialize生成XPath解析对象
Result=etree.tostring (HTML,encoding= UTF-8) #解析对象输出代码
打印(类型(html))
打印(类型(结果))
print(result.decode(utf-8 ))
#etree将修复HTML文本节点。
第一
第二项
属性
(2)读取HTML文件进行解析
从lxml导入etree
HTML=etree.parse (test.html ,etree.htmlparser ()) #指定解析器htmlparser将根据文件修复HTML文件中缺少的声明等信息。
结果=etree.tostring(html) #被解析为字节
# result=etree . tostringlist(HTML)#解析到列表中
打印(类型(html))
打印(类型(结果))
打印(结果)
#
b\n
\n第一项
\n第二个项目
\n第三项
\n第四项
\n第五项
\n
(3)获取所有节点返回的列表。每个元素都是元素类型,所有节点都包含在其中。
从lxml导入etree
html=etree.parse(test ,etree。HTMLParser())
Result=html.xpath(//*) #//代表获取后代节点,*代表获取全部
打印(类型(html))
打印(类型(结果))
打印(结果)
#
[, , ]
要获得li节点,可以使用//后跟节点名,然后调用xpath()方法。
Html.xpath(//li) #获取所有后代节点的li节点
(4)获取子节点。您可以通过/或//找到元素的子节点或后代。如果要选择li节点的所有直接A节点,可以使用此方法。
Result=html.xpath(//li/a) #通过追加/a选择所有li节点的所有直接A节点,因为//li用于选择所有li节点,/a用于选择li节点的所有直接子节点A。
(5)获取父节点。我们知道可以通过连续的/或//找到子节点或后代节点,所以我们可以使用.查找父节点或parent:获取父节点。
从lxml导入etree
从lxml.etree导入HTMLParser
text=
第一
第二项
html=etree。HTML(文本,etree。HTMLParser())
result=html . XPath(//a[@ href= link 2 . html ]/./@ class’)
result 1=html . XPath(//a[@ href= link 2 . html ]/parent:*/@ class )
打印(结果)
打印(结果1)
#
[项目-1]
[项目-1]
(6)属性匹配在选择时,我们也可以使用@符号进行属性筛选。例如,在这里,如果您想要选择其类别为item-1的li节点,您可以这样做:
从lxml导入etree
从lxml.etree导入HTMLParser
text=
第一
第二项
html=etree。HTML(文本,etree。HTMLParser())
result=html.xpath(//li[@ ])
打印(结果)
(7)文本获取我们使用XPath中的text()方法获取节点中的文本。
从lxml导入etree
text=
第一
第二项
html=etree。HTML(文本,etree。HTMLParser())
result=html . XPath(//Li[@]/a/text())#获取节点a下的内容。
1=html . XPath(//li[@]//text())#获取Li下所有后代节点的内容。
打印(结果)
打印(结果1)
(8)属性获取使用@符号获取节点的属性,如下:获取所有li节点下所有A节点的href属性。
result=html . XPath(//Li/a/@ href )#获取a的href属性。
result=html . XPath(//li//@ href )#获取Li所有子节点的href属性。
(9)属性多值匹配如果一个属性有多个值,我们可以用contains()函数来获取。
从lxml导入etree
text1=
第一
第二项
html=etree。HTML(text1,etree。HTMLParser())
result=html . XPath(//Li[@]/a/text())
result 1=html . XPath(//Li[contains(@ class, aaa)]/a/text())
打印(结果)
打印(结果1)
#第一种方法得不到任何值,contains()可以精确匹配节点。
[]
[第一个]
(10)多属性匹配另外,我们可能会遇到根据多个属性确定一个节点的情况。这时候就需要同时匹配多个属性。这时,可以用和运算符来连接:
从lxml导入etree
text1=
第一
第二项
html=etree。HTML(text1,etree。HTMLParser())
result=html . XPath(//Li[@ and @ name= fore ]/a/text())
result 1=html . XPath(//Li[contains(@ class, aaa) and @name=fore]/a/text())
打印(结果)
打印(结果1)
#
[第二项]
[第二项]
(11)XPath运算符中的运算符
形容
例子
返回值
或者
或者
年龄=19或年龄=20
如果年龄等于19或20,则返回true,但无论如何都会返回false。
和
和
19岁和21岁
如果年龄等于20,则为True,否则为false。
现代的
接管
5模块2
一个
取两个节点的集合
//book //cd
返回包含book和cd元素的所有节点的集合。
增加
6 4
10
-
负的
6-4
2
*
多样地
6*4
24
差异
分开
8区四
2
=
等于
年龄=19岁
真实的
!=
不等于
年龄!=19
真实的
小于
19岁
真实的
=
小于或等于
年龄=19岁
真实的
大于
19岁
真实的
=
大于或等于
年龄=19岁
真实的
此表参考来源:http://www . w3school . com . cn/XPath/XPath _ operators . ASP
(12)按序选择有时候,我们在选择的时候某些属性可能同时匹配多个节点,但我们只想要其中的某个节点,如第二个节点或者最后一个节点,这时可以利用中括号引入索引的方法获取特定次序的节点:
从什么是导入诡异又阴森的树形灯
text1=
第一个
第二个
第三个
第四个
html=etree .HTML(文本1,etree .HTMLParser())
结果=html。XPath(//Li[contains(@ class, aaa)]/a/text()) #获取所有里节点下a节点的内容
结果1=html。XPath(//Li[1][contains(@ class, aaa)]/a/text()) #获取第一个
结果2=html。XPath(//Li[last()][contains(@ class, aaa)]/a/text()) #获取最后一个
结果3=html。XPath(//Li[position()2和position() 4][contains(@class, aaa)]/a/text()) #获取第一个
结果4=html。XPath(//Li[last()-2][包含(@ class, aaa)]/a/text()) #获取倒数第三个
打印(结果)
打印(结果1)
打印(结果2)
打印(结果3)
打印(结果4)
#
[第一个, 第二个, 第三个, 第四个]
[第一个]
[第四个]
[第三个]
[第二个]
这里使用了最后()、位置()函数,在路径语言中,提供了100多个函数,包括存取、数值、字符串、逻辑、节点、序列等处理功能,它们的具体作用可参考:http://www . w3school . com . cn/XPath/XPath _ functions . ASP
(13)节点轴选择路径语言提供了很多节点选择方法,包括获取子元素、兄弟元素、父元素、祖先元素等,示例如下:
从什么是导入诡异又阴森的树形灯
text1=
第一个
第二个
第三个
第四个
html=etree .HTML(文本1,etree .HTMLParser())
结果=html。XPath(//Li[1]/ancestor:*)#获取所有祖先节点
结果1=html。XPath(//Li[1]/ancestor:div )#获取差异祖先节点
结果2=html。XPath(//Li[1]/attribute:*)#获取所有属性值
结果3=html。XPath(//Li[1]/child:*)#获取所有直接子节点
结果4=html。XPath(//Li[1]/descendant:a )#获取所有子孙节点的a节点
结果5=html。XPath(//Li[1]/following:*)#获取当前子节之后的所有节点
结果6=html。XPath(//Li[1]/following-sibling:*)#获取当前节点的所有同级节点
#
[, ]
[]
[aaa , item]
[]
[]
[, ]
[, ]
以上使用的是路径语言轴的用法,更多轴的用法可参考:http://www . w3school . com . cn/XPath/XPath _ axes . ASP
(14)案例应用:抓取开发语言排行榜指数前20名排行开发语言
#!/usr/bin/env python
#编码:utf-8
导入请求
从请求.异常导入请求异常
从什么是导入诡异又阴森的树形灯
从lxml.etree导入语法分析错误
导入数据
定义一个页面(html):
标题={
用户代理: Mozilla/5.0(Windows NT 10.0;win 64x 64)apple WebKit/537.36(KHTML,像壁虎一样)Chrome/67。0 .3396 .62 Safari/537.36英尺
}
尝试:
response=requests.get(html,headers=headers)
body=response.text #获取网页内容
除了请求异常作为e:
打印(请求是错误!,e)
尝试:
html=etree .HTML(body,etree .HTMLParser()) #解析超文本标记语言文本内容
结果=html。XPath(//table[contains(@ class, table-top 20 )]/tbody/tr//text())#获取列表数据
位置=0
对于范围内的我(20岁):
如果i==0:
产出结果[我:5]
否则:
产出结果[位置:位置5] #返回排名生成器数据
pos=5
除了解析错误为e:
打印(电子位置)
极好的写入文件(数据):#将数据重新组合成字典写入文件并输出
对于我加入数据:
sul={
2018年6月排行:i[0],
2017年6排行:i[1],
开发语言:i[2],
评级:i[3],
变化率:我[4]
}
with open(test.txt , a ,encoding=utf-8) as f:
f.write(json.dumps(sul,确保_ascii=False) \n) #必须格式化数据
f.close()
打印(苏尔)
不返回
def main():
URL= https://www。会的。com/TiO be-index/
数据=一页到一页(网址)
revaule=write_file(data)
如果revaule==无:
打印("确定")
if __name__==__main__ :
主()
#
{ 2018年6月排名: 1 , 2017年6月排名: 1 ,开发语言: Java ,评分: 15.368% ,变化率: 0.88%}
{ 2018年6月排名: 2 , 2017年6月排名: 2 ,开发语言: C ,评分: 14.936% ,变化率: 8.09%}
{ 2018年6月排名: 3 , 2017年6月排名: 3 ,开发语言: C ,评分: 8.337% ,变化率: 2.61%}
{ 2018年6月排名: 4 , 2017年6月排名: 4 ,开发语言: Python ,评分: 5.761% ,变化率: 1.43%}
{ 2018年6月排名: 5 , 2017年6月排名: 5 ,开发语言: C# ,评级: 4.314% ,变化率: 0.78%}
{ 2018年6月排名: 6 , 2017年6月排名: 6 ,开发语言: Visual Basic。净值,评级: 3.762% ,变化率: 0.65%}
{ 2018年6月排名: 7 , 2017年6月排名: 8 ,开发语言: PHP ,评级: 2.881% ,变化率: 0.11%}
{ 2018年6月排名: 8 , 2017年6月排名: 7 ,开发语言: JavaScript ,评分: 2.495% ,变化率:-0.53%}
{ 2018年6月排名: 9 , 2017年6月排名:-,开发语言: SQL ,评级: 2.339% ,变化率: 2.34%}
{ 2018年6月排名: 10 , 2017年6月排名: 14 ,开发语言: R ,评分: 1.452% ,变化率:-0.70%}
{ 2018年6月排名: 11 , 2017年6月排名: 11 ,开发语言: Ruby ,评分: 1.253% ,变化率:-0.97%}
{ 2018年6月排名: 12 , 2017年6月排名: 18 ,发展语言:目标-C ,评级: 1.181% ,变化率:-0.78%}
{ 2018年6月排名: 13 , 2017年6月排名: 16 ,开发语言: Visual Basic ,评级: 1.154% ,变化率:-0.86%}
{ 2018年6月排名: 14 , 2017年6月排名: 9 ,开发语言: Perl ,评级: 1.147% ,变化率:-1.16%}
{ 2018年6月排名: 15 , 2017年6月排名: 12 ,开发语言: Swift ,评级: 1.145% ,变化率:-1.06%}
{ 2018年6月排名: 16 , 2017年6月排名: 10 ,开发语言:汇编语言,评级: 0.915% ,变化率:-1.34%}
{ 2018年6月排名: 17 , 2017年6月排名: 17 ,开发语言: MATLAB ,评级: 0.894% ,变化率:-1.10%}
{ 2018年6月排名: 18 , 2017年6月排名: 15 ,开发语言: Go ,评分: 0.879% ,变化率:-1.17%}
{ 2018年6月排名: 19, 2017
6排行: 13, 开发语言: Delphi/Object Pascal, 评级: 0.875%, 变化率: -1.28%}
{2018年6月排行: 20, 2017年6排行: 20, 开发语言: PL/SQL, 评级: 0.848%, 变化率: -0.72%}
XPath的更多用法参考:http://www.w3school.com.cn/xpath/index.asp
python lxml库的更多用法参考:http://lxml.de/
©
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。