• python爬虫边看边学(数据解析)


    数据解析

    一、正则表达式

           Regular Expression,正则表达式是一种使用表达式的方式对字符串进行匹配的语法规则。
           我们抓取到的网页源代码本质上就是一个超长的字符串, 想从里面提取内容。用正则再合适不过了。

           正则的优点: 速度快, 效率高, 准确性高

           正则的缺点: 新手上手难度有点高。

           不过只要掌握了正则编写的逻辑关系, 写出一个提取页面内容的正则其实并不复杂。

           正则的语法: 使用元字符进行排列组合来匹配字符串。在线测试正则表达式https://tool.oschina.net/regex/

           元字符: 具有固定含义的特殊符号 常用元字符有以下:

    .  匹配除换行符以外的任意字符
    w 匹配字母或数字或下划线
    s 匹配任意的空白符
    d 匹配数字
    
     匹配一个换行符
    	 匹配一个制表符
    ^ 匹配字符串的开始
    $ 匹配字符串的结尾
    W 匹配非字母或数字或下划线
    D 匹配非数字
    S 匹配非空白符
    a|b 匹配字符a或字符b
    () 匹配括号内的表达式,也表示一个组
    [...] 匹配字符组中的字符
    [^...] 匹配除了字符组中字符的所有字符
    

      量词:控制前面的元字符出现的次数

    * 重复零次或多次
    + 重复一次或多次
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次
    

      贪婪匹配和非贪婪匹配

    • 贪婪匹配:匹配更多的字符
    • 非贪婪匹配:匹配尽可能少的字符(*、+、?后带?)

    str:‘I love China,I love my homeland,I love China’
    reg: I.*China
    此时匹配的是:'I love China,I love my homeland,I love China'
    
    reg:I.*?China
    此时匹配的是:'I love China'
    

      带HTML标签

    str:<div>I love China</div>
    reg:<.*>
    匹配结果:<div>I love China</div>
    
    reg:<.*?>
    匹配结果:<div>
                  </div>
    
    
    str:<div>I love China</div><span>I love my homeland</span>
    reg:<div>.*?</div>
    匹配结果:<div>I love China</div>
    

      

     二、re模块匹配HTML标签

    import re
    
    s = """
        <div class='ex1111'><span id='1'>Jack</span></div>
        <div class='ex2222'><span id='2'>Rose</span></div>
        <div class='ex33333'><span id='3'>Merry</span></div>
        <div class='ex44444'><span id='4'>Job</span></div>
        <div class='ex55555'><span id='5'>Smith</span></div>
    """
    obj = re.compile(r"<div class='ex(.*?)'><span id='(?P<ttt>d+?)'>(.*?)</span></div>", re.S)
    res = obj.finditer(s)
    for i in res:
        print(i.group(1), i.group('ttt'), i.group(3))

    三、豆瓣爬取前250

    import re
    import requests
    import csv
    
    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'}
    url = 'https://movie.douban.com/top250'
    resp = requests.get(url, headers=headers)
    page_content = resp.text
    obj = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>'
                     r'.*?<p class="">.*?<br>(?P<year>.*?)&nbsp', re.S)
    result = obj.finditer(page_content)
    f = open('data.csv', 'w', encoding='utf-8')
    csvwriter = csv.writer(f)
    
    for i in result:
        dic = i.groupdict()
        dic['year'] = dic['year'].strip()
        print(dic)
        csvwriter.writerow(dic.values())
    f.close()

      

  • 相关阅读:
    爬虫心得
    WSL windows子系统ubuntu18.04建设自己的乌云
    WSL windwos 子系统 ubuntu18.04安装mysql
    python 163 email 554
    Centos 安装Oracle
    JS带进度 文件 重复 自动 异步上传
    xadmin 小组件默认折叠
    grep
    sed
    awk
  • 原文地址:https://www.cnblogs.com/shixiaoxun/p/14589129.html
Copyright © 2020-2023  润新知