xpath和bs4解析

刚学完xpath和bs4解析,先不讨论哪个性能更好(就我这5年前的CPU也很难体验出来)

xpath:

html = etree.HTML(respText)
        data_list = html.xpath('//ul[@class="cook-list"]//li[@class="clearfix"]')  # 找指定ul下得所有li
        for data in data_list:
            # 提取标签文本
            title = data.xpath('./div/a/text()')[0]
            # 提取标签属性
            title2 = data.xpath('./a/@title')[0]
            # 这里从1开始,不是0
            try:
                title3 = data.xpath('./div/div[1]//span[2]/text()')[0]
            # 上面[0]会报错
            except IndexError:
                title3 = ""

            # 这个数据有多个空格组
            headicon = "".join(data.xpath('./div/div[2]/a/text()'))  # 无分隔符join
            headicon = headicon.strip()  # 去空格

            # 生成器函数
            yield{
                "标题": title,
                "配料": title2,
                "评分": title3,
                "博主": headicon
            }

bs4:

    def parse_data_index(self, resp):
        soup = BeautifulSoup(resp, "lxml")
        data_list = soup.find_all('img', width="300px")
        for data in data_list:
            href = data.get("src")
            self.write_data(href)

二者功能差不多,并且都要用lxml,bs4还有一个BeautifulSoup

其实从例子上已经能看出来了,如果要抓取一个标签下的多个内容,xpath可能会更加直观一点,按照目录结构往下级怎么折腾都行,个人也比较喜欢这种方式,需要注意的是这里的编号是从1而不是从0开始的;

bs4适合一步到位抓到指定位置,比如直接抓取网页的title、meta之类,往下移动没有xpath那么好用(个人习惯),但是可以支持往上走(preview_sibling),在特定的场合肯定会比xpath代码少。


总的来说,xpath比较符合目录结构,而且书写方式比较直观,不出意外未来肯定是以xpath为主的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值