正则,xpath和BeactifulSoup三者区别

2 篇文章 0 订阅
1 篇文章 0 订阅
    1.正则表达式是进行内容匹配,将符合要求的内容全部获取;xpath()能将字符串转化为标签,它会检测字符串内容是否为标签,但是不能检
    测出内容是否为真的标签;Beautifulsoup是Python的一个第三方库,它的作用和 xpath 作用一样,都是用来解析html数据的相比之下,
    xpath的速度会快一点,因为xpath底层是用c来实现的
    2.三者语法不同,正则表达式使用元字符,将所有获得内容与匹配条件进行匹配,而xpath和bs4将获取的解析后的源码进行按条件筛选,筛选
    出想要的标签即根据标签属性来找到指定的标签,之后对标签进行对应内容获取。

下面通过代码来区分它们:

    import re
    from lxml import etree
    from bs4 import BeautifulSoup
    from urllib.request import urlopen,Request
     
    url = 'https://www.meishij.net/chufang/diy/?&page=1'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
    }
     
    def get_code(url):
        request = Request(url,headers=headers)
        response = urlopen(request)
        code = response.read().decode()
        return code
     
    # 正则表达式可以直接找到所有符合匹配条件的值,并将每个符号要求的结果定义成元组装进列表中
    def pattern(code):
        pattern = re.compile(r'<img class="img".*?alt="(.*?)".*?src="(.*?)">',re.S)
        result = pattern.findall(code)
        print(result)
     
    def xpath(code):
        root = etree.HTML(code)
        # 从根标签开始,找到所有类名为img的img标签
        img_list = root.xpath('//img[@class="img"]')
        for value in img_list:
            name = value.xpath('@alt')[0]
            img = value.get('src')
            print(name,img)
     
    def beautifulsoup(code):
        # 用beautifulsoup()方法解析所得的数据的每个节点都是类
        # 使用bs.XX 获取所有XX当中的第一个XX以及第一个XX里面的内容
        # 因此爬虫时要用select(),它可以获取所有的符合要求的标签
        bs = BeautifulSoup(code,'lxml')
        img_list = bs.select('img.img')
        # img_list是一个列表,里面包含了所有类名为img的img标签,将标签进行遍历通过get()即可得到标签内对应的内容
        for value in img_list:
            name = value.get('alt')
            img = value.get('src')
            print(name,img)
     
    code = get_code(url)
    regular(code)
    xpath(code)
    beautifulsoup(code)

对于初学者楼主建议还是先从正则学起,比较基础易懂,而且实用。

之后主流个人推荐xpath

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值