程序员最在乎的两件事,你知道是什么吗?没错,一是有没有女朋友(或男朋友),二是什么编程语言是最好的。
当有人问程序员有没有女朋友时,程序员都会脸红红的,不好意思的低下头,默默的哭泣;当有人说什么编程语言是最好时,程序员都会让对方脸红红的,不好意思的低下头,默默的哭泣。
其实,编程语言没有好坏之分,只有合不合适,一味的争论,还不如了解一下编程语言排行榜。
4.1 爬语言排行榜
在网站https://www.tiobe.com/tiobe-index/上,每个月都会更新编程语言的排行,都会用表格的形式展示。在这个看颜值的时代,表格排列,不是很优美,如果能制作图形的方式,那将更受欢迎,为此,我们将爬取编程语言排行榜的数据,写入excel表格中并生成图表。
老铁,这次我们不用BeautifulSoup解析爬虫返回的结果,而改用Cython实现的高性能的lxml库,来解析xml或html。在用pip/pip3 install lxml安装之后,便可引入使用。
import requests
from requests.exceptions import RequestException
from lxml import etree
from lxml.etree import ParseError
import xlwings as xw
class LangRanking:
app = None
wb = None
sht = None
def __init__(self, link):
self.link = link
# 创建excel文件
def open(self):
self.app = xw.App(visible=True, add_book=False)
# 新建工作簿
self.wb = self.app.books.add()
# 页sheet1
self.sht = self.wb.sheets["sheet1"]
# 单元格内容
self.sht.range("A1").value = "编程语言"
self.sht.range("B1").value = "排名"
# 插入数据
def insert(self, i, lang, order):
# 按行输入
self.sht.range("A" + str(i)).value = lang
self.sht.range("B" + str(i)).value = order
def create_chart(self):
chart = self.sht.charts.add(200, 10)
chart.set_source_data(self.sht.range('A2').expand())
chart.width = 640
chart.height = 320
# 在当前目录下生成文件
self.wb.save("编程语言琅琊榜.xlsx")
self.wb.close()
self.app.quit()
def get_data(self):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36"
}
try:
res = requests.get(self.link, headers=headers)
# 解析HTML文本内容
html = etree.HTML(res.text, etree.HTMLParser())
# 定位至需要的标签
result = html.xpath('// table[ @ id = "top20"] / tbody ')
self.open()
index = 2
for tbody in result:
tr_list = tbody.xpath('tr')
for td in tr_list:
lang = td[3].text
num = td[0].text
self.insert(index, lang, num)
index += 1
self.create_chart()
except RequestException:
print("请求服务器异常")
except ParseError:
print("数据解析错误")
if __name__ == '__main__':
lr = LangRanking("https://www.tiobe.com/tiobe-index/")
lr.get_data()
输出结果
4.2 lxml详解
lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言。它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索。
1. XPath常用规则
节点名称:选取此节点的所有子节点;
/:从当前节点选取直接子节点;
//:从当前节点选取子孙节点;
.:选取当前节点;
..:选取当前节点的父节点;
@:选取属性;
* :通配符,选择所有元素节点与元素名;
@*:选取所有属性;
[@attrib] :选取具有给定属性的所有元素;
[@attrib='value']:选取给定属性具有给定值的所有元素;
[tag]:选取所有具有指定元素的直接子节点;
[tag='text']:选取所有具有指定元素并且文本内容是text节点。
2. 修护html
lxml和BeautifulSoup一样,都有修护html文件的功能。
from lxml import etree
html = """
- 老陈
- 吹水编程
"""
html = etree.HTML(html) # 初始化生成一个XPath解析对象
result = etree.tostring(html, encoding='utf-8')
print(result.decode('utf-8'))输出结果
- 老陈
- 吹水编程
3. 获取节点
用xpath规则,可以很容易地获取到你想要的节点内容。
from lxml import etree
content = """
- 老陈
- 吹水编程
"""
html = etree.HTML(content, etree.HTMLParser())
result = html.xpath('//a[@href="index.html"]/../@class')
print(result)输出结果
['item0']
4. 获取文本
指定节点属性,获取节点里面的文本内容。多节点的内容,在上面的爬虫程序已经提供过了,在这,就不再赘述了。
from lxml import etree
content = """
- 老陈
- 吹水编程
"""
html = etree.HTML(content, etree.HTMLParser())
result = html.xpath('//li[@class="item0"]/a/text()')
print(result)
输出结果
['老陈']
好了,有关lxml解析爬虫返回html的内容,老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。分享Python,前端(小程序)、App和嵌入式方面的干货。关注我,没错的。
#Python##网络爬虫##程序员##爬虫#
