第4天|10天搞定Python网络爬虫,爬语言,程序员必看

程序员最在乎的两件事 , 你知道是什么吗?没错,一是有没有女朋友(或男朋友) , 二是什么编程语言是最好的 。
当有人问程序员有没有女朋友时 , 程序员都会脸红红的,不好意思的低下头,默默的哭泣;当有人说什么编程语言是最好时,程序员都会让对方脸红红的,不好意思的低下头 , 默默的哭泣 。
其实,编程语言没有好坏之分,只有合不合适 , 一味的争论,还不如了解一下编程语言排行榜 。

第4天|10天搞定Python网络爬虫,爬语言,程序员必看

4.1 爬语言排行榜

在网站https://www.tiobe.com/tiobe-index/上,每个月都会更新编程语言的排行,都会用表格的形式展示 。在这个看颜值的时代,表格排列 , 不是很优美,如果能制作图形的方式,那将更受欢迎,为此,我们将爬取编程语言排行榜的数据,写入excel表格中并生成图表 。
老铁,这次我们不用BeautifulSoup解析爬虫返回的结果,而改用Cython实现的高性能的lxml库 , 来解析xml或html 。在用pip/pip3 install lxml安装之后,便可引入使用 。
import requestsfrom requests.exceptions import RequestExceptionfrom lxml import etreefrom lxml.etree import ParseErrorimport xlwings as xwclass LangRanking:app = Nonewb = Nonesht = Nonedef __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()# 页sheet1self.sht = self.wb.sheets["sheet1"]# 单元格内容self.sht.range("A1").value = "https://www.itzhengshu.com/excel/编程语言"self.sht.range("B1").value = "https://www.itzhengshu.com/excel/排名"# 插入数据def insert(self, i, lang, order):# 按行输入self.sht.range("A"str(i)).value = https://www.itzhengshu.com/excel/langself.sht.range("B"str(i)).value = https://www.itzhengshu.com/excel/orderdef create_chart(self):chart = self.sht.charts.add(200, 10)chart.set_source_data(self.sht.range('A2').expand())chart.width = 640chart.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 = 2for tbody in result:tr_list = tbody.xpath('tr')for td in tr_list:lang = td[3].textnum = td[0].textself.insert(index, lang, num)index= 1self.create_chart()except RequestException:print("请求服务器异常")except ParseError:print("数据解析错误")if __name__ == '__main__':lr = LangRanking("https://www.tiobe.com/tiobe-index/")lr.get_data()
输出结果
第4天|10天搞定Python网络爬虫,爬语言,程序员必看

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 etreehtml = """
  • 老陈
  • 吹水编程
"""html = etree.HTML(html)# 初始化生成一个XPath解析对象result = etree.tostring(html, encoding='utf-8')print(result.decode('utf-8'))输出结果

  • 老陈
  • 吹水编程
3. 获取节点
用xpath规则,可以很容易地获取到你想要的节点内容 。
from lxml import etreecontent = """
  • 老陈
  • 吹水编程
"""html = etree.HTML(content, etree.HTMLParser())result = html.xpath('//a[@href="https://www.itzhengshu.com/excel/index.html"]/../@class')print(result)【第4天|10天搞定Python网络爬虫,爬语言,程序员必看】输出结果
['item0']
4. 获取文本
指定节点属性,获取节点里面的文本内容 。多节点的内容,在上面的爬虫程序已经提供过了 , 在这,就不再赘述了 。
from lxml import etreecontent = """
  • 老陈
  • 吹水编程
"""html = etree.HTML(content, etree.HTMLParser())result = html.xpath('//li[@class="item0"]/a/text()')print(result)
输出结果
['老陈']
好了,有关lxml解析爬虫返回html的内容 , 老陈讲完了,如果觉得对你有所帮助,希望老铁能转发点赞 , 让更多的人看到这篇文章 。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励 。
一个当了10年技术总监的老家伙 , 分享多年的编程经验 。想学编程的朋友,可关注今日头条:老陈说编程 。分享Python,前端(小程序)、App和嵌入式方面的干货 。关注我,没错的 。
#Python##网络爬虫##程序员##爬虫#

相关经验推荐