正则表达式、xpath和Beautifulsoup的分析和总结

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)
pattern(code)
xpath(code)
beautifulsoup(code)

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值