Python爬虫lxml的xpath二次匹配
from lxml import etree
'''
在爬取多级分类,并且需要逐级对应时用到
'''
html = '''
<div>
<div class="content_box" id="divnewslist">
<ul>
<li><a href='***' title="">→ a</a>
<ul>
<li><a href='****' title="">a1</a></li>
<li><a href='****' title="">a2</a></li>
</ul>
</li>
<li><a href='***' title="">→ b</a>
<ul>
<li><a href='****' title="">b1</a></li>
</ul>
</li>
</ul>
</div>
</div>
'''
page = etree.HTML(html)
element_div = page.xpath('//div[@id="divnewslist"]/ul/li')
print(element_div)
输出: [<Element li at 0x2f85048>, <Element li at 0x2f85108>]
下面开始二次匹配:
for i in element_div:
# 打印出第一次匹配的标签内容
print(etree.tounicode(i))
# 匹配出一级分类
class_1 = i.xpath('a/text()') # 这儿不用'/',直接从下一级标签开始匹配
print(class_1)
# 匹配出二级分类
class_2 = i.xpath('ul/li/a/text()')
print(class_2)
# 然后就是储存了......
输出:
<li><a href="***" title="">→ a</a> <ul> <li><a href="****" title="">a1</a></li> <li><a href="****" title="">a2</a></li> </ul> </li> ['→ a'] ['a1', 'a2'] <li><a href="***" title="">→ b</a> <ul> <li><a href="****" title="">b1</a></li> </ul> </li> ['→ b'] ['b1']
*记录学习过程中的问题,加油! *