zoukankan      html  css  js  c++  java
  • 《数据采集与网络爬虫》之数据解析

    一、使用字符串查找的方式提取网页中的数据

    # 使用字符串查找的方式提取网页中所有的城市名
    import requests
    url="http://www.yb21.cn/post/"
    response=requests.get(url)
    response.encoding="GBK" # 该网站使用的字符编码为GBK
    html=response.text
    '''
        <a href="/post/city/1301.html"><strong>石家庄市</strong></a>
        <a href="/post/city/1302.html"><strong>唐山市</strong></a>
    '''
    temp=html
    str_begin="<strong>"
    str_end="</strong>"
    list_city=[]
    while True:
        pos_begin=temp.find(str_begin) # <strong>位置
        if pos_begin==-1:
            break
        pos_end=temp.find(str_end) # </strong>位置
        city=temp[pos_begin+len(str_begin):pos_end] # 截取<strong>和</strong>之间的字符串
        list_city.append(city) # 加入列表
        temp=temp[pos_end+len(str_end):] # 下一次循环从</strong>后面开始找
    
    # 清洗,删除所有的'辖区'和'辖县'
    list_remove=['辖区','辖县']
    for city_remove in list_remove:
        for city in list_city:
            if city==city_remove:
                list_city.remove(city)
    print(list_city)
    print(len(list_city)) #362

    二.使用正则表达式查找的方式提取网页中的数据

    例1:

    # 使用正则表达式查找的方式提取网页中所有的城市名
    import requests
    import re # python的正则表达式库
    url="http://www.yb21.cn/post/"
    response=requests.get(url)
    response.encoding="GBK"
    html=response.text
    '''
        <a href="/post/city/1301.html"><strong>石家庄市</strong></a>
        <a href="/post/city/1302.html"><strong>唐山市</strong></a>
    '''
    list_city=re.findall("<strong>(.+?)</strong>",html)
    # 注意:括号表示要提取这一块的数据,?表示非贪婪匹配,即匹配尽可能少的。
    list_remove=['辖区','辖县']
    for city_remove in list_remove:
        for city in list_city:
            if city==city_remove:
                list_city.remove(city)
    print(list_city)
    print(len(list_city)) # 362

     结论:字符串查找的方式比较繁琐,正则表达式方式相对较简单。

     例2:

    # 使用正则表达式查找的方式提取网页中所有的二级学院
    import requests
    import re # python的正则表达式库
    
    # 1.得到html响应内容
    url="https://www.whit.edu.cn/jgsz.htm"
    response=requests.get(url)
    response.encoding="UTF-8"
    html=response.text
    
    # 2.缩小查找范围,只从id="jx"的div里找
    str_begin='id="jx"'
    str_end="</ul>"
    pos_begin=html.find(str_begin)
    temp=html[pos_begin+len(str_begin):]
    pos_end=temp.find(str_end)
    temp=temp[:pos_end]
    
    '''
        <a href="https://jxgc.whit.edu.cn/" target="_blank" onclick="_addDynClicks(&#34;wburl&#34;, 1655460640, 66257)">机械工程学院</a>
    '''
    # 3.正则表达式查找
    list_department=re.findall(r"<a href=.*)">(.+?)</a>", temp)
    # 注意:)和"表示括号和双引号本身,因为括号和双引号是正则表达式的特殊字符
    print(list_department)
  • 相关阅读:
    oracle11g 卸载和安装(win7,32位)
    MySQL忘记密码解决办法
    GPIO硬件资源的申请,内核空间和用户空间的数据交换,ioctl(.....),设备文件的自动创建
    模块参数,系统调用,字符设备编程重要数据结构,设备号的申请与注册,关于cdev的API
    开发环境的搭建,符合导出,打印优先级阈值
    定时器中断
    Linux系统移植的重要文件
    linux 相关指令
    linux各文件夹含义和作用
    外部中断实验
  • 原文地址:https://www.cnblogs.com/beast-king/p/14526698.html
Copyright © 2011-2022 走看看