python之lxml(xpath)

2019-07-02 10:48:50 浏览数 (3)

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

lxml很好

定位非常好

详细解说在注释里面有了

代码语言:javascript复制
 1 #!/usr/bin/python3.4
 2 # -*- coding: utf-8 -*-
 3 
 4 from lxml import etree
 5 import urllib.request
 6 
 7 # 目标网址的html可以看一下
 8 url = "http://www.1kkk.com/manhua589/"
 9 # 解析网址
10 data = urllib.request.urlopen(url).read()
11 # 解码
12 html = data.decode('UTF-8','ignore')
13 
14 page = etree.HTML(html.lower())
15 
16 # 查找的目标样式如下
17 """
18 ...
19 <ul class="sy_nr1 cplist_ullg">
20     <li>
21       <a href="/vol1-6871/" class="tg">第1卷</a>(96页)</li>
22     <li>
23       <a href="/vol2-6872/" class="tg">第2卷</a>(90页)</li>
24     <li>
25       <a href="/vol3-6873/" class="tg">第3卷</a>(95页)</li>
26     <li>
27       <a href="/vol4-6874/" class="tg">第4卷</a>(94页)</li>
28     <li>
29       <a href="/vol5-6875/" class="tg">第5卷</a>(95页)</li>
30     ...
31 """
32 
33 # 找到ul下li下的a中的href
34 hrefs = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/a/@href')
35 
36 # 找到<a>...</a>之间的文字
37 hrefnames = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/a/text()')
38 
39 # 找到页数
40 hrefpages = page.xpath('//ul[@class="sy_nr1 cplist_ullg"][2]/li/text()')
41 
42 for href in hrefs:
43     # 打印出来
44     print(href)

打印结果:

代码语言:javascript复制
 1 /vol1-6871/
 2 /vol2-6872/
 3 /vol3-6873/
 4 /vol4-6874/
 5 /vol5-6875/
 6 /vol6-6876/
 7 /vol7-6877/
 8 /vol8-6878/
 9 /vol9-6879/
10 /vol10-6880/
11 /vol11-23456/
12 /vol12-23457/
13 /vol13-23695/
14 /vol14-28326/
15 /vol15-31740/
16 /ch145-149-33558/
17 /ch150-33559/
18 /ch151-197255/
19 /ch152-33560/
20 /ch153-33561/
21 /ch154-33562/
22 /ch155-33563/
23 /ch156-33564/
24 /ch157-33565/
25 ...

1 人点赞