python之lxml(xpath)

时间:2023-03-08 22:02:07

bs4确实没这个好用,bs4的树太复杂

lxml很好

定位非常好

详细解说在注释里面有了

 #!/usr/bin/python3.4
# -*- coding: utf-8 -*- from lxml import etree
import urllib.request # 目标网址的html可以看一下
url = "http://www.1kkk.com/manhua589/"
# 解析网址
data = urllib.request.urlopen(url).read()
# 解码
html = data.decode('UTF-8','ignore') page = etree.HTML(html.lower()) # 查找的目标样式如下
"""
...
<ul class="sy_nr1 cplist_ullg">
<li>
<a href="/vol1-6871/" class="tg">第1卷</a>(96页)</li>
<li>
<a href="/vol2-6872/" class="tg">第2卷</a>(90页)</li>
<li>
<a href="/vol3-6873/" class="tg">第3卷</a>(95页)</li>
<li>
<a href="/vol4-6874/" class="tg">第4卷</a>(94页)</li>
<li>
<a href="/vol5-6875/" class="tg">第5卷</a>(95页)</li>
...
""" # 找到ul下li下的a中的href
hrefs = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/a/@href') # 找到<a>...</a>之间的文字
hrefnames = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/a/text()') # 找到页数
hrefpages = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/text()') for href in hrefs:
# 打印出来
print(href)

打印结果:

 /vol1-6871/
/vol2-6872/
/vol3-6873/
/vol4-6874/
/vol5-6875/
/vol6-6876/
/vol7-6877/
/vol8-6878/
/vol9-6879/
/vol10-6880/
/vol11-23456/
/vol12-23457/
/vol13-23695/
/vol14-28326/
/vol15-31740/
/ch145-149-33558/
/ch150-33559/
/ch151-197255/
/ch152-33560/
/ch153-33561/
/ch154-33562/
/ch155-33563/
/ch156-33564/
/ch157-33565/
...