python3 库,python的解析库

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: