• python爬虫--解析网页几种方法之正则表达式


    1、正则表达式

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

    re 模块使 Python 语言拥有全部的正则表达式功能。

    re.match函数

    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

    import re
    print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
    print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配

    结果:

    (0, 3)
    None
    import re
    
    line = "Cats are smarter than dogs"
    
    matchObj = re.match( r'(.*) are (.*?) .*', line)
    
    if matchObj:
       print ("matchObj.group() : ", matchObj.group())
       print ("matchObj.group(1) : ", matchObj.group(1))
       print ("matchObj.group(2) : ", matchObj.group(2))
    else:
       print ("No match!!")

    结果:

    matchObj.group() :  Cats are smarter than dogs
    matchObj.group(1) :  Cats
    matchObj.group(2) :  smarter
    r'(.*) are (.*?) .*',r的意思为raw string,纯粹的字符串,group(0),是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分。

    re.search方法

    re.search 扫描整个字符串并返回第一个成功的匹配。

    re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

    import re
    
    line = "Cats are smarter than dogs";
    
    matchObj = re.match( r'dogs', line, re.M|re.I)
    if matchObj:
       print ("match --> matchObj.group() : ", matchObj.group())
    else:
       print ("No match!!")
    
    matchObj = re.search( r'dogs', line, re.M|re.I)
    if matchObj:
       print ("search --> matchObj.group() : ", matchObj.group())
    else:
       print ("No match!!")

    结果:

    No match!!
    search --> matchObj.group() :  dogs

    re.findall方法

    findall能够找到所匹配的结果,并且以列表的形式返回。

    import requests
    import re
    
    link = "http://www.sohu.com/"
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
    r = requests.get(link, headers= headers)
    html = r.text
    title_list = re.findall('href=".*?".<strong>(.*?)</strong>',html)
    print (title_list)
    ['新闻', '财经', '体育', '房产', '娱乐', '汽车', '时尚', '科技', '美食', '星座', '邮箱', '地图', '千帆', '畅游']

    抓取搜狐的主标题。




  • 相关阅读:
    switch 语句注意事项
    line-height 和 font-size的关系
    HTTP 缓存
    hashchange事件的认识
    面向对象的写法,见到就添,持续更新。。。
    chrome浏览器开发者工具之同步修改至本地
    history对象的一些知识点
    你不知道的函数节流,提高你的JS性能!
    玩媒体查询,就是这么简单粗暴!
    css中clip-path属性的运用
  • 原文地址:https://www.cnblogs.com/leon507/p/7615431.html
Copyright © 2020-2023  润新知