精华内容
下载资源
问答
  • 文本输入省份名称中的某几个字,把符合条件的省份名称显示一个 流程是用jdbc从数据库取出数据放入bean再从servlet获取bean传到前端页面 数据库得有一张省份表province CREATE DATABASE springdb; USE ...

    在文本框内输入省份名称中的某几个字,把符合条件的省份名称显示一个

    流程是用jdbc从数据库取出数据放入bean中再从servlet中获取bean传到前端页面

    1. 数据库得有一张省份表province
    CREATE DATABASE springdb;
    USE springdb;
    CREATE TABLE `province` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `Pname` VARCHAR(255) DEFAULT NULL COMMENT '省份名称',
      `jiancheng` VARCHAR(255) DEFAULT NULL COMMENT '简称',
      `shenghui` VARCHAR(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `province` VALUES ('1', '河北', '冀', '石家庄');
    INSERT INTO `province` VALUES ('2', '山西', '晋', '太原市');
    INSERT INTO `province` VALUES ('3', '内蒙古', '蒙', '呼和浩特市	');
    INSERT INTO `province` VALUES ('4', '辽宁', '辽', '沈阳');
    INSERT INTO `province` VALUES ('5', '江苏', '苏', '南京');
    INSERT INTO `province` VALUES ('6', '浙江', '浙', '杭州');
    INSERT INTO `province` VALUES ('7', '安徽', '皖', '合肥');
    INSERT INTO `province` VALUES ('8', '福建', '闽', '福州');
    INSERT INTO `province` VALUES ('9', '江西', '赣', '南昌');
    
    
    1. bean的设置
    package domain;
    
    public class province {
    
        private Integer id;
        private String name;
        private String jiancheng;
        private String shenghui;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getJiancheng() {
            return jiancheng;
        }
    
        public void setJiancheng(String jiancheng) {
            this.jiancheng = jiancheng;
        }
    
        public String getShenghui() {
            return shenghui;
        }
    
        public void setShenghui(String shenghui) {
            this.shenghui = shenghui;
        }
    
    }
    
    

    `
    3. jdbc获取数据库的数据(模糊查询)

    package dao;
    
    import javax.swing.*;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    
    public class provinceDao {
        public List<String> queryprovinceByid(String Proname) {
            // 获取链接对象
            // 根据链接对象 获取执行sql语句的对象  PreparSatement
            // 根据查询sql  获取结果集 Res
            // 遍历
            //  关闭
            ArrayList<String> list=new ArrayList<>();
            Connection conn = null;
            PreparedStatement pst = null;
            ResultSet res = null;
            String url = "jdbc:mysql:///springdb?characterEncoding=utf8";
            String user = "root";
            String password = "root";
            // 加载驱动
            String name = Proname;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection(url, user, password);
                System.out.println("1" +name);
                String sql = "select * from province where name like '%"+name+"%' ";
    
    
                pst = conn.prepareStatement(sql);
    
    
                res = pst.executeQuery();
    
                while (res.next()){
             
                   name=res.getString("name");
                   list.add(name);
                }
    
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (res != null) {
                        res.close();
                    }
                    if (pst != null) {
                        pst.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
             return list;
    
        }
    

    4.根据获取到的数据创建servlet进行处理传到前端

    package controller;
    
    import dao.provinceDao;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
    
    @WebServlet("/searchServlet")
    public class SearchServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String strProname = request.getParameter("proname");
            System.out.println(strProname);
            List<String> r = null;
            if(strProname != null && !"".equals(strProname.trim())) {
                provinceDao provinceDao = new provinceDao();
    
                r = provinceDao.queryprovinceByid(strProname);
            }
    
            String s = "";
            for (int i = 0; i < r.size(); i++) {
                s += r.get(i) + "  ";
            }
    
    
    
            response.setContentType("text/html;charset = utf-8");
            PrintWriter pw = response.getWriter();
    
            System.out.println(s);
    
            pw.print(s);
            pw.flush();
            pw.close();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doPost(request,response);
        }
    }
    
    

    5.传到前端页面用ajax进行处理

    <%--
      Created by IntelliJ IDEA.
      User: admin
      Date: 2020/11/25
      Time: 18:55
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
      请输入省份关键字:<input type="text" name="proname" id="proname">
      <input type="button" value="查询" id="select" οnclick="search()" >
      <div id="box"></div>
    
    
    
    
    
    
    
      <script type="text/javascript">
    
      function search() {
       var xmlHttp=new XMLHttpRequest();
    
       xmlHttp.onreadystatechange=function () {
    
         if (xmlHttp.status===200&&xmlHttp.readyState===4){
           var box=document.getElementById("box").innerText=xmlHttp.responseText;
         }
    
    
       }
    
        var proname = document.getElementById("proname").value;
       console.log(proname);
        var url = "searchServlet?proname="+proname;
        xmlHttp.open("get",url,true);
        xmlHttp.send();
    
      }
    
    
    
    
    
    
      </script>
      </body>
    </html>
    
    
    展开全文
  • html: 台站名称: 添加 删除 报警名称:

    html:

    <table class="h-box">
                <tr>
                    <td class="num1">
                       <span>台站名称:</span> 
                        <input type="text" id="t1"/>
                        <button id="tAdd" >添加</button>
                        <button id="tRemove">删除</button>
                    </td>
                    <td class="num2">
                        <span>报警名称:</span>
                        <input type="text" id="t2" />
                        <button id="bAdd">添加</button>
                        <button id="bRemove">删除</button>
                    </td>
                </tr>
                <tr class="textarea">
                    <td>
                        <span>名称列表:</span>
                        <ul type="text" id="t3">
                        </ul>
                    </td>
                    <td>
                        <span>报警列表:</span>
                        <ul type="text" id="t4"></ul>
                    </td>
                </tr>
            </table>
    css:

      body{
                background:url("../img/weixin.png") no-repeat;
                width:100%;
                height:100%;
                position:relative;
            }
             *{margin:0;padding:0}
             #box{
                 width:71.52%;
                 margin-left:15%;
                 margin-top:8.16%;
                 position:absolute;
                 z-index:10;
             }
             #box .h-box{
                 width:100%;/*1030*/
             }
              #box .h-box tr{
                 margin-bottom:3.85%;
                  width:100%;
                  margin-left:0;
                  padding:0;
              }
              #box .h-box tr .num1{
                  z-index:20;
                  width:51.74%;
                  vertical-align:top;
              }
               #box .h-box tr .num2{
                  z-index:20;
                  width:48.25%;
                  vertical-align:top;
              }
              #box .h-box tr td span{
                  color:#545555;
                  font-size:0.875em;
                  font-family:"Microsoft YaHei";
              }
              .textarea span{
                  position:absolute;
              }
               
               #box .h-box tr td #t1,#box .h-box tr td #t2,#t3,#t4{
                   width:51.84%;
                   border-radius:3px;
                   border:1px solid #ccc;
                   padding-left:2%;
                   background:#fff;
                   -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);
                   -moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);
                   box-shadow:inset 0 1px 2px rgba(0,0,0,.3);
                   overflow-y:auto;
               }
                #t3{  margin-left:12.69%;padding-top:1%; }
                #t4{margin-left:13.68%;padding-top:1%;}
               #tAdd,#bAdd,#tRemove,#bRemove{
                    background:url(../img/btnbg.png) no-repeat 100% 100%;
                   width:13.20%;
                   border:none;
                   color:#fff;
                   font-size:1em;
                   font-family:"Microsoft YaHei";
                   margin-left:1.87%;
               }
              .h-box textarea{resize:none}
              
              #bao{
                  width:100%;
                  margin-top:1%;
              }
              #bao span{
                  float:left;
                  color:#545555;
                  font-size:0.875em;
                  font-family:"Microsoft YaHei";
              }
               #box  #timebg{
                   width:88.40%;
                   background:#fff;
                   margin-left:6.68%;
                    border-radius:3px;
                   border:1px solid #ccc;
                   -webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);
                   -moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.3);
                   box-shadow:inset 0 1px 2px rgba(0,0,0,.3);
                   position:relative;
               }
               #box #t-btn{
                   width:100%;
                   margin-top:1.97%;
                   position:absolute;
               }
                #edit, #save{
                   background:url(../img/btnbg.png) no-repeat;
                   width:7.16%;
                   border:none;
                   color:#fff;
                   font-size:1em;
                   font-family:"Microsoft YaHei";
                   float:right;
                   margin-left:9.27%;
               }
              #edit{
                    margin-left:84%;
                    position:absolute;
               }
      .textarea  #t3{
    		   overflow-y:auto;
    		 list-style:none;
    		   
    	   }
        .textarea ul li{
             list-style:none;
             width:100%;
             font-family:"Microsoft YaHei";
             font-size:0.93em;
        }
        .textarea ul li a{
            text-decoration:none;
            color:#545454;
             font-family:"Microsoft YaHei";
             font-size:0.93em;
        }
         .textarea ul li a:hover{
            color:#3f8cd3;
            text-decoration:none;
        }



    jquery:

    //获取文本框的值
    
    $("#tAdd").click(function () {
        var value = $("#t1").val();
        $("#t3").<span style="color:#CC0000;">append</span>("<li  title='" + value + "'>" + "<a href='#'>" + value + "</a>" + "</li>");
    });
    //名称列表
    $("#t3").click(function (e) {
        var removeLi = $(e.target);
        if (e.target.nodeName == "LI") {
            removeLi.addClass("checkLi");
            $(".checkLi a").attr("style", "color:#205E96;font-size:0.93em;font-family:'Microsoft yahei'");
        } else if (e.target.nodeName == "A") {
            removeLi.addClass("checkLia");
            $(".checkLia").attr("style", "color:#205E96;font-size:0.93em;font-family:'Microsoft yahei'");
        }
    })
    //删除
    $("#tRemove").click(function () {
        $('#t3>.checkLi a').remove();
        $('#t3>li .checkLia').parent().remove();
    });
    
    
    //报警列表移出
    $("#bAdd").click(function () {
        var value = $("#t2").val();
        $("#t4").append("<li  title='" + value + "'>" + "<a href='#'>" + value + "</a>" + "</li>");
    });
    $("#t4").click(function (e) {
        var removeLi = $(e.target);
        if (e.target.nodeName == "LI") {
            removeLi.addClass("checkLi");
            $(".checkLi a").attr("style", "color:#205E96;font-size:0.93em;font-family:'Microsoft yahei'");
        } else if (e.target.nodeName == "A") {
            removeLi.addClass("checkLia");
            $(".checkLia").attr("style", "color:#205E96;font-size:0.93em;font-family:'Microsoft yahei'");
        }
    })
    //删除
    $("#bRemove").click(function () {
        $('#t4>.checkLi a').remove();
        $('#t4>li .checkLia').parent().remove();
    });
    
    


    展开全文
  • 要实现题目所说的,并不难,几步就能搞定了。...3、 D:\启动 文件夹创建快捷方式,最好是字母简写+中文名称 如图:   4、直接打开“打开程序.exe”(其它文件为源文件,不编程的话删除),它会出现您的桌

     

    要实现题目所说的,并不难,几步就能搞定了。

     

    1、在D盘建一个名为“启动”的文件夹,用来存放快捷方式

    2、在“我的电脑”“属性”“高级”“环境变量”“系统环境变量”中的“Path”的未尾添加:

    ;D:\启动\

    3、在 D:\启动  文件夹中创建快捷方式,最好是字母简写+中文名称

    如图:

     

    4、直接打开“打开程序.exe(其它文件为源文件,不编程的话删除),它会出现在您的桌面的右上角,您可以一直打开放在那里不用关闭,方便随时输入

     辅助工具下载:http://download.csdn.net/detail/pukuimin1226/4508766

    效果:

     

    点击所选内容或按“Enter”键,就和双击快捷方式一样,可以打开相应的软件了。

     

    其实,这里就和在“开始”->“运行”里一样的,只不过添加了一个自动提示输入的功能,更加方便,而系统的“运行”,必须得自己输入全部的名称。

     

    展开全文
  • 爬虫小白继续负重前行,应朋友需要,爬取携程网上部分景点的游客评论数据,...首页搜索框中输入景点名称,如:丽江古城,点击查询。返回结果如下,并点击景点名称下面的评论数据:会自动跳转到该景点的评论内容,...

    爬虫小白继续负重前行,应朋友需要,爬取携程网上部分景点的游客评论数据,然后绘制评论数据的词云图,进而发掘用户的旅游期间的关注点。

    最终效果如下:

    52c347d29b18ab0e27915d64cc95ae23.png
    只提取并展示名词关键词

    90e9e73f9b034dad07d953e5d5b1aa82.png
    只提取并展示形容词关键词

    1、爬取数据部分

    使用火狐浏览器,打开携程网首页,登录个人账号(为了方便查看评论数据)。

    在首页搜索框中输入景点名称,如:丽江古城,点击查询。

    dbd3f41e537d1b68bdc6d5a553528005.png

    返回结果如下,并点击景点名称下面的评论数据:

    16ff5c7d5ebaafeedb30bf72a75cb043.png

    会自动跳转到该景点的评论内容,如下:

    c5926489e1f939bcc7898667316c7b93.png

    然后按快捷键F12,查看网页元素,如果没有反映,刷新网页即可。界面如下:

    cde65e82f1e7083ce00d3f61eba23047.png

    找到并点击上面页面中的“网络”,一般来说,按F12后会自动定位到“网络”这个选项。

    然后在“过滤URL”框中输入“comment”,实现对URL的筛选,由于我们需要的是用户的评论数据,所以输入的关键词是comment。效果如下:

    1b9210367fbf412f5f6fa431ed78d80a.png

    找到“方法”列值为“POST”的那两个URL,点击其中任意一个,会弹出右侧对话框,效果如下:

    8b7ea2fe48a3c08fe21212bbea598927.png

    然后,找到并点击“请求”按钮,神奇的一击!我们需要的爬虫参数全都出来了~效果如下:

    50e4bad56e38a4a4f394c658abc6e22e.png

    接下来的事情就相当无脑操作了,请大家复制下面的爬数据代码,并粘贴到你们的python运行环境中,然后,在代码中找到上面红色框中的参数的位置,并修改相应的参数值为待爬网页的参数即可。

    如果你够细心,你就会发现上面截图最右下角有个“请求有效载荷”栏,里面的参数信息就是红色框中信息的压缩显示,而且可以直接复制“请求有效载荷”栏的信息替换爬虫代码中相应部分。

    爬数据代码:

    以下代码全部来自:松鼠爱吃饼干:Python爬虫案例:爬取携程评论

    个人仅做了一些必要的备注。

    import requests
    import json
    import time
    import csv
    import re
    
    #爬取丽江评论
    c=open(r'D:lijiang.csv','a+',newline='',encoding='utf8')#需要修改文件名为待爬景点的名字
    fieldnames=['user','time','score','content']#设置存储最终爬虫结果的表格的字段名
    writer=csv.DictWriter(c,fieldnames=fieldnames)
    writer.writeheader()
    #head 设置使用哪个浏览器进行爬虫
    head = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'}
    
    #评论内容所在连接,获取方法见代码注释①
    postUrl = "https://sec-m.ctrip.com/restapi/soa2/12530/json/viewCommentList"
    
    #以下参数根据待爬网页相应的参数修改,或者直接复制“请求有效载荷”栏的信息进行替换
    data_1 = {"pageid": "290510","viewid": "3056","tagid": "-11","pagenum": "1","pagesize": "10","contentType": "json","SortType": "1","head": {"appid": "100013776","cid": "09031096210696081838","ctok": "","cver": "1.0","lang": "01","sid": "8888","syscode": "09", "auth": "","extension": [{"name": "protocal","value": "https"}]},"ver": "7.10.3.0319180000"}
    #"pagesize": "10"表示一页有10条评论
    
    datas = []#用来存放构建的60个请求头
    for j in range(60):
    #以下参数根据待爬网页相应的参数修改,或者直接复制“请求有效载荷”栏的信息进行替换,但是!注意,"pagenum": str(j + 1)表示翻页,不能替换掉!
        data1 = {"pageid": "290510","viewid": "3056","tagid": "-11","pagenum": str(j + 1),"pagesize": "10","contentType": "json","SortType": "1","head": {"appid": "100013776","cid": "09031096210696081838","ctok": "","cver": "1.0","lang": "01", "sid": "8888","syscode": "09","auth": "","extension": [{"name": "protocal","value": "https"}]},"ver": "7.10.3.0319180000"}
        datas.append(data1)
    
    for k in datas[:60]:#循环抓取60页评论
        print('正在抓取第' + k['pagenum'] + "页")
        time.sleep(3)#延迟操作3秒,目的是模仿人类,防止被反爬机制识别出来是爬虫机器人
        #因为用户评论使用的是post方法,所以下面我们也要使用post方法请求网页,text方法用于提取网页中文本内容
        html1 = requests.post(postUrl, data=json.dumps(k)).text
        #json.loads()将返回的网页信息从json格式转为dict(字典)格式,方便后续进行信息提取
        html1 = json.loads(html1)
    
        #提取网页文本中的评论内容,为什么要这么写?这需要我们对一个具体网页信息进行分析,分析过程见注释②
        comments = html1['data']['comments']
        #注意,comments是一个列表,列表中每个元素是一个存放了用户各种信息的字典,包括用户ID、用户评论日期、评论内容、评分……
        #所以,comments的格式:[{"id":123,"content":"不错的一次体验","score":'4'},{第2个用户的评论相关信息},{第3个用户的评论相关信息},....]    
          for i in comments:#循环提取comments列表中每个用户的ID、评论日期、打分、评论内容
            user = i['uid']
            time1 = i['date']
            score = i['score']
            content = i['content']
            content = re.sub(" ", "", content)#使用正则表达式对提取到的评论内容进行处理
            content = re.sub("", "", content)
            writer.writerow({'user': user,'time':time1,'score': score,'content':content})#把单个用户的评论信息写入表中
    c.close()
    
    #由于csv文件直接打开会乱码,下面读入爬取好的数据,转换为xlsx格式并保存
    import pandas as pd
    pd = pd.read_csv('D:lijiang.csv',encoding='utf8')
    pd.to_excel('D:lijiang.xlsx',encoding='utf8')

    注释:

    ①postUrl获取办法:点击“消息头”---找到“POST”,后面红色框内的链接就是评论内容的链接。

    e95012c1ceb43e7256f6df3d0acae47a.png

    ②单个网页解析

    抓取后的一个网页的html样子如下,因为单个网页有10条用户评论,在不改变原来数据结构的前提下,为了方便演示,这里只展示了2个用户评论。

    原始网页并没有下面这么“优美”的结构,层次分明,我们需要先下载单个网页来分析网页结构,进而才能准确定位我们需要的信息。分享网页分析的两个技巧:

    1)将爬取的单个网页粘贴到python编译器中,如Pycharm,使用光标来发现层次关系。如将光标点击到“[”,Pycharm会自动高亮同一层次对应的"]"所在的位置。

    2)根据目标导向,我们需要的核心数据是用户的评论,由于都是中国人,评论数据自然是中文,用肉眼定位大片中文,然后结合光标来发现网页内容的层次关系。

    通过下面的网页,我们可以发现,我们需要的数据具体位置:

    {......

    "data":{

    .......

    "comments":[{

    "id":164903024,

    "content":'丽江古城是位于我国西南边陲,是我国茶马古道上重要一站,是云南到西藏的必经之道,大量的马帮 和商队造就了这个城市的兴起和繁华。',

    "score":"5",

    .......

    }]},}

    {'ResponseStatus': {'Timestamp': '/Date(1604143571534+0800)/', 'Ack': 'Success', 'Errors': [], 'Build': None, 'Version': None, 'Extension': [{'Id': 'CLOGGING_TRACE_ID', 'Version': None, 'ContentType': None, 'Value': '2859573375097530598'}, {'Id': 'RootMessageId', 'Version': None, 'ContentType': None, 'Value': '100025527-0a19b172-445595-4086166'}]},
     'head': {'auth': '', 'errcode': 0, 'errmsg': ''},
     'data': {'cmtquantity': 12890,
              'cmtscore': 4.5,
              'totalpage': 1289,
              'recompct': '97%推荐',
              'stscs': [{'tagid': -21, 'count': 5880, 'desc': '带图', 'moodtype': 0, 'location': 'tab'}, {'tagid': -12, 'count': 386, 'desc': '低分', 'moodtype': 0, 'location': 'tab'}, {'tagid': -250, 'count': 12890, 'desc': '最近游玩', 'moodtype': 0, 'location': 'tab'}, {'tagid': -22, 'count': 315, 'desc': '来自订单', 'moodtype': 0, 'location': 'tag'}, {'tagid': -24, 'count': 47, 'desc': '视频', 'moodtype': 0, 'location': 'tag'}, {'tagid': -25, 'count': 786, 'desc': '来自旅拍', 'moodtype': 0, 'location': 'tag'}],
              'comments': [{'id': 164903024,
                            'uid': '周游列国',
                            'userImage': 'https://dimg04.c-ctrip.com/images/Z8070a0000004m9t7BB14_C_180_180.jpg',
                            'title': '',
                            'content': '丽江古城是位于我国西南边陲,是我国茶马古道上重要一站,是云南到西藏的必经之道,大量的马帮 和商队造就了这个城市的兴起和繁华。',
                            'date': '2020-10-29 07:56',
                            'score': '5',
                            'isselect': False,
                            'simgs': ['https://dimg01.c-ctrip.com/images/0103o1200087imt2yA5F1_C_160_160_Q60.jpg', 'https://dimg06.c-ctrip.com/images/0104b1200087iikinFAA3_C_160_160_Q60.jpg', 'https://dimg05.c-ctrip.com/images/010021200087iio2h63C4_C_160_160_Q60.jpg', 'https://dimg08.c-ctrip.com/images/0106g1200087iles769CD_C_160_160_Q60.jpg', 'https://dimg03.c-ctrip.com/images/010561200087imnl15679_C_160_160_Q60.jpg', 'https://dimg04.c-ctrip.com/images/010461200087iijjc499B_C_160_160_Q60.jpg'],
                            'bimgs': ['https://dimg01.c-ctrip.com/images/0103o1200087imt2yA5F1_C_640_360_Q60.jpg', 'https://dimg06.c-ctrip.com/images/0104b1200087iikinFAA3_C_640_640_Q60.jpg', 'https://dimg05.c-ctrip.com/images/010021200087iio2h63C4_C_640_480_Q60.jpg', 'https://dimg08.c-ctrip.com/images/0106g1200087iles769CD_C_480_640_Q60.jpg', 'https://dimg03.c-ctrip.com/images/010561200087imnl15679_C_360_640_Q60.jpg', 'https://dimg04.c-ctrip.com/images/010461200087iijjc499B_C_480_640_Q60.jpg'],
                            'videos': [],
                            'replyeditor': None,
                            'reply': None,
                            'usecount': 3,
                            'sourcetype': 0,
                            'playdate': '',
                            'keywordlist': None,
                            'cmttype': 'others',
                            'commentOrderInfo': '',
                            'commenter': True,
                            'memberLevel': 10,
                            'memberName': '黄金贵宾',
                            'sightStar': 5,
                            'interestStar': 5,
                            'costPerformanceStar': 5},
                           {'id': 164919071,
                            'uid': 'ALAN628',
                            'userImage': 'https://dimg04.c-ctrip.com/images/t1/headphoto/136/299/437/649eb217e3e54746b7a53b8665e14b00_C_180_180.jpg',
                            'title': '',
                            'content': '值得!&#x0A;到丽江的第一天就去了那里,看你游玩时间,如果紧张的话,5个小时肯定也够了而且建议在里面吃饭,你要买的鲜花饼牛肉干冰粉烧烤米线都可以买到吃到',
                            'date': '2020-10-28 17:58',
                            'score': '5',
                            'isselect': False,
                            'simgs': ['https://dimg01.c-ctrip.com/images/010201200087hq1vq2D0B_C_160_160_Q60.jpg', 'https://dimg07.c-ctrip.com/images/0106q1200087hpy56633F_C_160_160_Q60.jpg', 'https://dimg07.c-ctrip.com/images/0102a1200087howr7D44B_C_160_160_Q60.jpg', 'https://dimg08.c-ctrip.com/images/010321200087hppkoFDB1_C_160_160_Q60.jpg', 'https://dimg06.c-ctrip.com/images/0102b1200087hnz0tAEE5_C_160_160_Q60.jpg'],
                            'bimgs': ['https://dimg01.c-ctrip.com/images/010201200087hq1vq2D0B_C_480_640_Q60.jpg', 'https://dimg07.c-ctrip.com/images/0106q1200087hpy56633F_C_480_640_Q60.jpg', 'https://dimg07.c-ctrip.com/images/0102a1200087howr7D44B_C_480_640_Q60.jpg', 'https://dimg08.c-ctrip.com/images/010321200087hppkoFDB1_C_480_640_Q60.jpg', 'https://dimg06.c-ctrip.com/images/0102b1200087hnz0tAEE5_C_360_640_Q60.jpg'],
                            'videos': [],
                            'replyeditor': None,
                            'reply': None,
                            'usecount': 0,
                            'sourcetype': 0,
                            'playdate': '',
                            'keywordlist': None,
                            'cmttype': 'others',
                            'commentOrderInfo': '',
                            'commenter': False,
                            'memberLevel': 30,
                            'memberName': '钻石贵宾',
                            'sightStar': 5,
                            'interestStar': 5,
                            'costPerformanceStar': 5}],
              'abtests': []}}

    使用同样的方法爬取其他几个景点的评论数据:世界之窗、嵩山、锦绣中华民俗村。

    2.绘制词云代码

    涉及的额外语料主要是停用词表:

    链接:https://pan.baidu.com/s/1dOpMKYCC-b9wkLv8WAySuA

    提取码:w2ah

    以下代码为本人原始手打,未精加工,可实现功能而已。

    #读入数据
    import pandas as pd
    path1 = 'D:lijiang.csv'
    rawdata1 = pd.read_csv(path1,header=0,encoding='utf8')
    print(rawdata1['content'].head(5))#查看前5条评论数据
    print(rawdata1['content'].shape)#查看评论数据条数
    comments1 = rawdata1['content']
    
    path2 = 'D:shijiezhichuang.csv'
    rawdata2 = pd.read_csv(path2,header=0,encoding='utf8')
    print(rawdata2['content'].head(5))#查看前5条评论数据
    comments2 = rawdata2['content']
    
    path3 = 'D:songshan.csv'
    rawdata3 = pd.read_csv(path3,header=0,encoding='utf8')
    print(rawdata3['content'].head(5))#查看前5条评论数据
    comments3 = rawdata3['content']
    
    path4 = 'D:jinxiuzhonghua.csv'
    rawdata4 = pd.read_csv(path4,header=0,encoding='utf8')
    print(rawdata4['content'].head(5))#查看前5条评论数据
    comments4 = rawdata4['content']
    
    #拼接评论数据
    import numpy as np
    allcomments = np.concatenate([comments1,comments2,comments3,comments4],axis=0)
    print(allcomments.shape)
    print(allcomments)
    
    allcomments_pd = pd.DataFrame({'comments':allcomments})
    print(allcomments_pd.tail(5))#查看后5行数据
    
    #不进行分词也可以直接提取关键词,并基于关键词绘制词云
    import jieba.analyse
    lst = []
    for i in allcomments_pd['comments']:
        lst.append(i)
    s = ','.join(lst)#jieba抽取关键词需要输入字符串
    keywords=jieba.analyse.extract_tags(s,topK=100,withWeight=True,allowPOS=('n'))#topK=100表示提取前100个关键词,allowPOS=('n')表示只提取名词
    print(keywords)#[('景色', 0.38318375268326504), ('体验', 0.20224094490946254), ..., ('价格', 0.013745652994182062)],数字为关键词的权重
    
    #仅抽取出关键词,不要权重
    wordslst = []
    for i in range(len(keywords)):
        w = keywords[i][0]
        wordslst.append(w)
    print(wordslst)
    
    #去除关键词中的停用词
    stopwords_path = 'D:宝宝Zone爬取携程旅游景点评论数据并绘制词云stopwords.txt'
    with open(stopwords_path, mode='r', encoding='utf-8') as f:
        lines = f.readlines()
        stopwords = [line.strip() for line in lines]
    #print(stopwords)
    # 去停用词
    words_without_stopwords = [w for w in wordslst if w not in stopwords]
    print(len(words_without_stopwords))#去除停用词后只有75个词了
    
    #绘制词云
    import wordcloud
    words_string = ','.join(words_without_stopwords)#词云图输入的数据类型要求为字符串,因此,需要将列表中的元素使用逗号拼接成字符串
    wc = wordcloud.WordCloud(max_words=60,font_path='msyh.ttc',width=800,height=600)
    #max_words=60表示词云图中最多放60个词,font_path='msyh.ttc'表示词云图的字体用微软雅黑,width=800,height=600分别为词云图的宽度和高度
    wc.generate(words_string)
    wc.to_file('C:UsersCaraDesktopmywordcloud.png')

    在绘制词云时的一点小经验,因为本次实验的目的是获取游客关注的点,并选取了嵩山、丽江古城、世界之窗、锦绣中华民俗村等景点作为代表,所以,可以想象,点评数据中一定会出现“嵩山、丽江古城、世界之窗、锦绣中华民俗村”等高频词,而这些高频词绘制在词云图中的意义不大,因此,我们可以将这些词放在停用词表中,在分词后,去停用词时去掉。

    参考:

    松鼠爱吃饼干:Python爬虫案例:爬取携程评论zhuanlan.zhihu.com
    zhihu-card-default.svg
    中文分词工具jieba中的词性类型 - Adien - 博客园www.cnblogs.com
    展开全文
  • 如何 Excel 使用 VBA 消息和输入框?问题:使用 vbYesNo 参数(显示答案按钮:是和否)制作一个 消息Msgbox,询问用户是否具有特定名称(例如,询问用户是否名为小明)。如果答案是否定的,请使用输入框...
  • Excel 添加和删除名称框

    千次阅读 2014-03-09 18:48:50
    1.给指定区域添加名称框  选中指定区域,在名称框输入名称,回车即可;如下图:   2.删除已经定义的名称框  菜单--》公式--》名称管理器,在弹出的窗口即可选择指定名称框依次删除了
  • 选中需要建立名称框的区域——在名称框中直接输入名称“数据源”,按下ENTER键,记住一定要按下Enter才可以创建名称,否则Excel不会创建名称。 利用新建名称对话框创建 公式——>定义名称——>新建名称(设置...
  • Struts 2框架的输入校验

    千次阅读 2013-04-06 19:27:45
    由于Struts 2框架可以同一个Action()使用的不同方法来处理不同的请求,因此,如果只想对Action的某个方法进行输入校验,则可以使用validateXxx()方法来实现,其中Xxx是将Action的方法名称
  • EXCEL快速输入数据的方法

    千次阅读 2017-09-02 20:40:55
    比如要选中下图所有数据,在名称框输入【A1:D6】。 (2)不连续单元格:在名称框输入单元格地址,用逗号隔开。 2.输入相似数据 文件--选项--高级--编辑选项中选中为单元格值启用记忆式键入,这样excel能记住...
  • 我有一个宠物名字和主人的数据集:Pets Ownersdog Jamesdog Katelynrat Shellycat Bob我希望能够"所有者"列搜索以找到名称Katelyn,然后为给定所有者打印出矢量名称。 到目前为止,我有这个:def pet_name():...
  • 1、文本框的InteractiveChange录入如下代码: IF LEN(ALLT(THISFORM.TEXT1.VALUE))<>0 SELE 0 SELECT DIST ALLT(药品名称)+ALLT(产地)+ALLT(STR(零售价,4,2)) AS 总称,药品名称,零售价,简称,产地,规格,...
  • 单元格失去焦点后,我们就可以看到下面的效果:双斜线表头设置的方法步骤和但斜线表头一样,不同的是单元格中输入纵向维度,横向维度,统计指标名称,例如: 样品信息, 项目信息, 统计值。注意:斜线表头中输入的内容...
  • 单元格失去焦点后,我们就可以看到下面的效果:双斜线表头设置的方法步骤和但斜线表头一样,不同的是单元格中输入纵向维度,横向维度,统计指标名称,例如: 样品信息, 项目信息, 统计值。注意:斜线表头中输入的内容...
  • 单元格失去焦点后,我们就可以看到下面的效果:双斜线表头设置的方法步骤和但斜线表头一样,不同的是单元格中输入纵向维度,横向维度,统计指标名称,例如: 样品信息, 项目信息, 统计值。注意:斜线表头中输入的内容...
  • 单元格失去焦点后,我们就可以看到下面的效果: 双斜线表头设置的方法步骤和但斜线表头一样,不同的是单元格中输入纵向维度,横向维度,统计指标名称,例如: 样品信息, 项目信息, 统计值。 注意:斜线表头中输...
  • 斜线表头 单斜线表头 ... ... ...单元格中输入内容为纵向维度名称,横向维度名称,例如:样品信息, 项目...设置的方法步骤和但斜线表头一样,不同的是单元格中输入纵向维度,横向维度,统计指标名称,例如: 样品信息, 项...
  • 背景我想数据框中识别部分匹配字符串的列名称,并将其替换为原始名称以及添加到其中的一些新元素.新元素是由列表定义的整数.这是一个similar question,但我担心建议的解决方案我的特定情况下不够灵活. here是另一...
  • 斜线表头 单斜线表头 ... ... ...单元格中输入内容为纵向维度名称,横向维度名称,例如:样品信息, 项目...设置的方法步骤和但斜线表头一样,不同的是单元格中输入纵向维度,横向维度,统计指标名称,例如: 样品信息, 项...
  • 工作中有需要用到模态框的可以看看× 前台菜单管理 名称:动作类型:viewclick路径:排序:关闭保存其中模态框有...这样可以避免模态框中输入内容时突然的误操作导致模态框关闭。另外还有一个属性:data-keyboard=...
  • 电商管理系统,我们经常可以看到仅输入商品名称或扫描了商品二维码,自动得出商品的详细信息及商品价格。这是怎么做到的呢?百数低代码开发平台能不能实现这样的功能呢? 下面我们一起来了解一下百数低代码开发...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,143
精华内容 1,257
关键字:

在名称框中输入