zoukankan      html  css  js  c++  java
  • 爬虫解析相关

    re模块

    常用正则表达式符号

    '.'     默认匹配除
    之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
    '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","
    abc
    eee",flags=re.MULTILINE)
    '$'     匹配字符结尾,或e.search("foo$","bfoo
    sdfsf",flags=re.MULTILINE).group()也可以
    '*'     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']
    '+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
    '?'     匹配前一个字符1次或0次
    '{m}'   匹配前一个字符m次
    '{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
    '|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
    '(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
     
     
    'A'    只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的
    ''    匹配字符结尾,同$
    'd'    匹配数字0-9
    'D'    匹配非数字
    'w'    匹配[A-Za-z0-9]
    'W'    匹配非[A-Za-z0-9]
    's'     匹配空白字符、	、
    、
     , re.search("s+","ab	c1
    3").group() 结果 '	'

    常用匹配语法

    re.match 从头开始匹配
    re.search 匹配包含
    re.findall 把所有匹配到的字符放到以列表中的元素返回
    re.splitall 以匹配到的字符当做列表分隔符
    re.sub      匹配字符并替换

    常用匹配模式

    re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
    M(MULTILINE): 多行模式,改变'^''$'的行为(参见上图)
    S(DOTALL): 点任意匹配模式,改变'.'的行为

    BeautifulSoup

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div class="tang">
            <h3 id="libai">李白</h3>
            <p>有耳莫洗颍川水,有口莫食首阳蕨。</p>
            <p>含光混世贵无名,何用孤高比云月?</p>
            <p>吾观自古贤达人,功成不退皆殒身。</p>
            <p>子胥既弃吴江上,屈原终投湘水滨。</p>
            <p>陆机雄才岂自保?李斯税驾苦不早。</p>
            <p>华亭鹤唳讵可闻?上蔡苍鹰何足道?</p>
            <p>君不见吴中张翰称达生,秋风忽忆江东行。</p>
            <p>且乐生前一杯酒,何须身后千载名?</p>
        </div>
    <div>Alex</div>
        <a class="alex" href="$$$$$">链接1</a>
        <a id="wu" href="$$$$$">链接2</a>
        <a class="alex" href="$$$$$">链接3</a>
    </body>
    </html>
    bs4_test.html
    from bs4 import BeautifulSoup as bs
    
    soup = bs(open('bs4_test.html',encoding='utf-8'),'lxml')
    print(soup.h3)
    
    #获取属性
    print(soup.h3.attrs)
    print(soup.a.attrs['href'])
    print(soup.a['href'])
    
    #获取内容
    print(soup.a.text)
    print(soup.a.string)
    print(soup.a.get_text())
    print(soup.h3.text)
    print(soup.h3.string)
    print(soup.h3.get_text())
    print('--------------------')
    print(soup.text)
    print('--------------------')
    print(soup.string)
    print('--------------------')
    
    # find
    print(soup.find('a',class_='alex'))
    print('####################')
    
    #findall
    print(soup.find_all('a'))
    print(soup.find_all('a',limit=2))
    print(soup.find_all('a',class_='alex'))
    print(soup.find_all(['a','h3']))
    print('??????????????????')
    print(soup.select('.alex'))
    print(soup.select('.alex')[1].text)
    print(soup.select('a'))
    print(soup.select('#wu'))
    print(soup.select('#wu')[0].text)
    print('@@@@@@@@@@@@@@@@@@@@@@@')
    
    # 层级选择器
    print(soup.select('.tang h3'))
    # 包含选择器
    print(soup.select('.tang > h3'))
    bs4基本用法
    <h3 id="libai">李白</h3>
    {'id': 'libai'}
    $$$$$
    $$$$$
    链接1
    链接1
    链接1
    李白
    李白
    李白
    --------------------
    
    
    
    Title
    
    
    
    李白
    有耳莫洗颍川水,有口莫食首阳蕨。
    含光混世贵无名,何用孤高比云月?
    吾观自古贤达人,功成不退皆殒身。
    子胥既弃吴江上,屈原终投湘水滨。
    陆机雄才岂自保?李斯税驾苦不早。
    华亭鹤唳讵可闻?上蔡苍鹰何足道?
    君不见吴中张翰称达生,秋风忽忆江东行。
    且乐生前一杯酒,何须身后千载名?
    
    Alex
    链接1
    链接2
    链接3
    
    
    --------------------
    None
    --------------------
    <a class="alex" href="$$$$$">链接1</a>
    ####################
    [<a class="alex" href="$$$$$">链接1</a>, <a href="$$$$$" id="wu">链接2</a>, <a class="alex" href="$$$$$">链接3</a>]
    [<a class="alex" href="$$$$$">链接1</a>, <a href="$$$$$" id="wu">链接2</a>]
    [<a class="alex" href="$$$$$">链接1</a>, <a class="alex" href="$$$$$">链接3</a>]
    [<h3 id="libai">李白</h3>, <a class="alex" href="$$$$$">链接1</a>, <a href="$$$$$" id="wu">链接2</a>, <a class="alex" href="$$$$$">链接3</a>]
    ??????????????????
    [<a class="alex" href="$$$$$">链接1</a>, <a class="alex" href="$$$$$">链接3</a>]
    链接3
    [<a class="alex" href="$$$$$">链接1</a>, <a href="$$$$$" id="wu">链接2</a>, <a class="alex" href="$$$$$">链接3</a>]
    [<a href="$$$$$" id="wu">链接2</a>]
    链接2
    @@@@@@@@@@@@@@@@@@@@@@@
    [<h3 id="libai">李白</h3>]
    [<h3 id="libai">李白</h3>]
    输出结果

    lxml

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1"/>
            <title></title>
        </head>
        <body>
            <div class="tang">
                <h3 id="Li">李白</h3>
                <p>云想衣裳花想容,春风拂槛露华浓。</p>
                <p>若非群玉山头见,会向瑶台月下逢。</p>
                <p>独坐敬亭山</p>
                <p>合沓牵数峰,奔地镇平楚。</p>
                <p>中间最高顶,髣髴接天语。</p>
            </div>
            
            <div class="qingZhao">
                <a class="敬亭山" href="#"><h3>[唐] 李白</h3></a>
                <span>李清照(1084年3月13日—约1155年),号易安居士,汉族,齐州济南(今山东省济南市章丘区)人。宋代女词人,婉约词派代表,有“千古第一才女”之称。
                李清照出生于书香门第,早期生活优裕,其父李格非藏书甚富,她小时候就在良好的家庭环境中打下文学基础。出嫁后与夫赵明诚共同致力于书画金石的搜集整理。
                金兵入据中原时,流寓南方,境遇孤苦。所作词,前期多写其悠闲生活,后期多悲叹身世,情调感伤。形式上善用白描手法,自辟途径,语言清丽。论词强调协律,
                崇尚典雅,提出词“别是一家”之说,反对以作诗文之法作词。能诗,留存不多,部分篇章感时咏史,情辞慷慨,与其词风不同。
                有《易安居士文集》《易安词》,已散佚。后人有《漱玉词》辑本。今有《李清照集校注》。</span>
                
                <p>醉花阴·薄雾浓云愁永昼</p>
                <a class="zuihuayin">[宋] 李清照</a>
                <p>薄雾浓云愁永昼。瑞脑消金兽。佳节又重阳,玉枕纱厨,半夜凉初透。东篱把洒黄昏後,有暗香盈袖。莫道不消魂,帘卷西风,人似黄花瘦。</p>
            </div>
            
            <div class="lizhi">
                <a class="zuihuayin">[宋] 李清照</a>
                <p>你的对手在看书</p>
                <p>你的敌人在磨刀</p>
                <p>你的闺蜜在减肥</p>
                <p>隔壁老王在练腰</p>
            </div>
        </body>
    </html>
    new_file.html
    from lxml import etree
    
    tree = etree.parse('new_file.html')
    print(tree)
    ret = tree.xpath('//div[@class="tang"]/p/text()')
    print(ret)
    print(ret[0])
    ret = tree.xpath('//p')
    print(ret)
    ret = tree.xpath('//div[@class="qingZhao"]/span/text()')
    print(ret)
    ret = tree.xpath('//h3//text()')
    print(ret)
    ret = tree.xpath('//div[@class="qingZhao"]//@href')
    print(ret[0])
    xpath基本使用
    <lxml.etree._ElementTree object at 0x0000022CDA5DB788>
    ['云想衣裳花想容,春风拂槛露华浓。', '若非群玉山头见,会向瑶台月下逢。', '独坐敬亭山', '合沓牵数峰,奔地镇平楚。', '中间最高顶,髣髴接天语。']
    云想衣裳花想容,春风拂槛露华浓。
    [<Element p at 0x22cda5db7c8>, <Element p at 0x22cda5db808>, <Element p at 0x22cda5db848>, <Element p at 0x22cda5db888>, <Element p at 0x22cda5db8c8>, <Element p at 0x22cda5db948>, <Element p at 0x22cda5db988>, <Element p at 0x22cda5db9c8>, <Element p at 0x22cda5dba08>, <Element p at 0x22cda5db748>, <Element p at 0x22cda5dba48>]
    ['李清照(1084年3月13日—约1155年),号易安居士,汉族,齐州济南(今山东省济南市章丘区)人。宋代女词人,婉约词派代表,有“千古第一才女”之称。
    			李清照出生于书香门第,早期生活优裕,其父李格非藏书甚富,她小时候就在良好的家庭环境中打下文学基础。出嫁后与夫赵明诚共同致力于书画金石的搜集整理。
    			金兵入据中原时,流寓南方,境遇孤苦。所作词,前期多写其悠闲生活,后期多悲叹身世,情调感伤。形式上善用白描手法,自辟途径,语言清丽。论词强调协律,
    			崇尚典雅,提出词“别是一家”之说,反对以作诗文之法作词。能诗,留存不多,部分篇章感时咏史,情辞慷慨,与其词风不同。
    			有《易安居士文集》《易安词》,已散佚。后人有《漱玉词》辑本。今有《李清照集校注》。']
    ['李白', '[唐] 李白']
    #
    输出结果
  • 相关阅读:
    数字随机码
    MYSQL数据导出乱码 MYSQL数据导入乱码
    提交表单弹出新窗口
    腾讯捐款居然用Q币,无耻!
    PowerShell如何依靠全局错误处理并执行脚本
    Windows PowerShell 2.0语言之函数和过滤器
    Windows PowerShell 2.0创建调用脚本文件
    Windows PowerShell 2.0 开发之命令别名
    Windows PowerShell 2.0之函数和脚本块共存
    Windows PowerShell 2.0命令别名技巧与内置别名
  • 原文地址:https://www.cnblogs.com/wusir66/p/10061310.html
Copyright © 2011-2022 走看看