python 使用re实现xpath节点功能

#! /usr/bin/python
# #encoding:utf-8

import re
#!/usr/bin/python
#encoding:utf-8
import re


def foo(xpath, content):
    print xpath
    if xpath.startswith('/'):
        arr= xpath[1:].split('/', 1)
        node = arr[0]
        c = re.compile(r"\<%s\>(.*?)\<\/%s\>" % (node, node), re.S)
        # print c.pattern
        content_list = c.findall(content)
        if len(arr) > 1:
            xpath = '/' + arr[1]
            return foo(xpath, content_list[0].strip())   #注意这里一定要加上return返回值
        else:
            return content_list[0].strip()


s = '''<html>
        <header><title>hello world</title></header>
        <body>
            <div>
                <h1>Hello World</h1>
            </div>
            <div>
                <span>test</span>
            </div>
        </body>
        </html>'''
xpath = '/html/body/span'
print foo(xpath, s)

抓取豆瓣最佳影评

import re
import codecs
def foo(xpath,content):
    xpath=xpath[1:]
    arr=xpath.split('/',1)
    cn_pattern = re.compile('[^\x00-\xff]+.*?[^\x00-\xff]+')
    if len(arr)>0:
        node=arr[0]
        fd_pattern=re.compile(r"\<%s(.*?)\<\/%s\>" %(node,node),re.S)
        fd_result=fd_pattern.findall(content)
        if len(arr)>1:
            xpath='/'+arr[1]
            for i in range(len(fd_result)):
                foo(xpath, fd_result[i])
        else:
            print cn_pattern.search(fd_result[0].strip()).group()


f=codecs.open('D:/doubanhtml/douban0.html','r','utf-8')
content=f.read()
xpath=('/header/h3/a')
foo(xpath,content)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值