美文网首页
只用re正则解析html

只用re正则解析html

作者: 是东东 | 来源:发表于2021-10-08 03:46 被阅读0次

目前功能用于解析div、div内的a标签 (更新中.......)

# -*- coding:utf-8 -*-
import re


def get_div_ele(pattern, any_str):
    ll = []
    tag = re.findall('//([a-z]+)\[', pattern)[0]
    ele = re.findall('@(\w+)?=', pattern)[0]
    va = re.findall('[",\'](.*)?[",\']', pattern)[0]
    if_continue = f'{ele}="{va}"'
    # print(tag)
    # print(ele)
    # print(va)
    # print(if_continue)
    if tag == 'a':
        pattern = f'{ele}="{va}".*?</{tag}>'
        pattern_1 = f'>(.*?)</{tag}>'
        _a = re.findall(pattern, any_str, re.S)
        if _a:
            for v in _a:
                _d, _t = {}, {}
                href = re.findall('href="(.*?)"', v)
                text = re.findall(pattern_1, v)
                texts = re.findall('>(.*?)<', v)
                print(texts)
                _d['href'] = href
                _t['texts'] = texts
                _t['ele'] = text
                _d['text'] = _t
                ll.append(_d)
        else:
            print(f'{tag} pattern没有匹配到')
    elif tag == 'div':
        pattern = f'<{tag} {ele}="{va}">.*</{tag}>'
        pattern_1 = pattern.split('>.*')[0]
        try:
            div = re.findall(pattern, any_str, re.S)[0]
            div = div.replace('\\\n', '').replace('\\\t', '').replace('\\\r', '').replace('\n', '').replace('\t', '') \
                .replace('\r', '').replace('  ', '').replace('  ', '').replace('  ', '').replace('  ', '').replace('  ',
                                                                                                                   '')
            x1 = re.search('<(\w+)', pattern).group(0)
            x2 = re.search('</\w+>', pattern).group(0)
            x3 = f'{x1} {if_continue}'
            div1 = div.split(x3)
            n = 1
            for text in div1:
                if text == '':
                    continue
                text = f'{pattern_1}{text}'
                dd = text.split(x2)
                d1 = x2.join(dd[:n])
                c1 = d1.count(x1)
                ddd = x2.join(dd[:c1 + 1])
                c2 = ddd.count(x2)
                if c1 == c2:
                    ll.append(ddd)
        except IndexError:
            print(f'{tag} pattern没有匹配到')

    return ll


result = {}
with open('baidu_ad.html', 'r', encoding='utf-8') as rr:
    text = rr.read()
ad = get_div_ele('//div[@class="_3te7bpt f13 c-gap-top-xsmall"]', text)
for _ in ad:
    _d = {}
    ad = get_div_ele('//a[@class="c-showurl c-color-gray"]', _)
    _d['result'] = _
    _d['urls'] = ad
    result['data'] = _d
print(result)

相关文章

  • 只用re正则解析html

    目前功能用于解析div、div内的a标签 (更新中.......)

  • python BeautifualSoup使用

    爬虫过程中解析html 获取关注信息,常用的方法有正则匹配re、xpath、BeautifualSoup,re 正...

  • 正则表达式

    正则表达式 (?P .*)提取字符串re.M,re.S,贪婪,非贪婪正则表达式,html标签 提取Python正则...

  • 爬虫解析----BS4解析

    爬虫解析方法分为:正则解析、xpath解析、bs4解析。 正则表达式直接对html字符串进行解析(最快)。xpat...

  • py爬虫7:正则表达式re

    正则解析只是其中一种,常见的还有BeautifulSoup和lxml,支持HTML元素解析操作 1、正则表达式 正...

  • XPath 解析 以及 re正则

    XPath 语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path)...

  • XPath 解析 和re正则

    XPath 语法 XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path)...

  • XPath 解析 以及 re正则

    XPath 语法 XML 实例文档 我们将在下面的例子中使用这个 XML 文档。 选取节点 表达式 描述 谓语(P...

  • 判断一个字符串为IP 地址

    不用正则: 使用正则(转载) import re defisIP(str): p = re.compile('^(...

  • xpath库详解

    xpath入门 python爬虫抓取网页内容,需要对html或xml结构的数据进行解析,如果用正则,单是写正则表达...

网友评论

      本文标题:只用re正则解析html

      本文链接:https://www.haomeiwen.com/subject/qvmtoltx.html