打开Python爬虫实战练习页面lxml库进阶语法及解析练习_S03_Spiderbuf,看到页面上的内容比较简单,比之前的两个练习多了一些样式。
在页面上右键 -> 显示网页源代码,翻到数据内容的HTML源码,发现跟之前的练习对比就多了一些样式的控制跟a标签的包裹。直接使用Python编写爬虫代码运行能够很顺利地把网页爬取下来,说明这次的练习重点在内容的解析上。
同样的,我们还是使用lxml这个python库,构造xpath表达式对网页内容进行解析。这里先教大家一个利用浏览器快速获取到指定网页元素的xpath表达式的方法:
打开浏览器开发者工具(F12),点击左上角的光标图标,然后把鼠标移动到需要分析的网页内容上面,就能够在开发者工具Elements(元素)详情里定位到该元素,然后在这行代码上右键 -> Copy(复制) -> Copy xpath(复制xpath),就能够得到想要的xpath表达式。但这样获取到的xpath表达式是绝对路径,要在爬虫里面适当调整一下。
加到HTML源码这里,我们发现整个页面就一个table,就可以通过之前练习中讲过的xpath相对定位来获取到每行,再解析每个单元格。至于单元格里面的内容,带的样式我们不需要,就可以直接使用xpath中的string(.)语法忽略掉,直接获取文本内容。
root = etree.HTML(html)
trs = root.xpath('//tr')
f = open('data03.txt', 'w', encoding='utf-8')
for tr in trs:
tds = tr.xpath('./td')
s = ''
for td in tds:
s = s + str(td.xpath('string(.)')) + '|'
# s = s + str(td.text) + '|'
print(s)
xpath的语法很灵活、很强大且能用性强,不受开发语言限制,也就是说不管你是用python写爬虫,还是用javascript写爬虫,或者用NodeJS写爬虫,甚至C/C++写爬虫,xpath都能用。这也是我们为什么一直强调要熟悉xpath语法的原因。
完整示例代码:示例代码