如何获取动态网页中的数据

我不懂网页开发,对静态的网页分析还行,类似这样的动态网页http://vip.stock.finance.sina.com.cn/mkt/?f=caishou#new_blhy 就毫无头绪了。查看网页源代码,找不到动态数据是怎么获取的。对于这类动态网页,我怎么找到获取动态网页的接口,写一个本地网页,通过浏览器运行,把这些数据获取之后,写到本地的文件之中,方便进一步处理。不讲究效率,越简单越好。

1个回答

可以集成一个浏览器内核 获取渲染之后的文档,参考:https://my.oschina.net/flashsword/blog/147334

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
httpclient 动态网页获取
public static String getHtmlByUrl(String url){ String html = null; HttpClient httpClient = new DefaultHttpClient();//创建httpClient对象 HttpGet httpget = new HttpGet(url);//以get方式请求该URL try { HttpResponse responce = httpClient.execute(httpget);//得到responce对象 int resStatu = responce.getStatusLine().getStatusCode();//返回码 if (resStatu==HttpStatus.SC_OK) {//200正常 其他就不对 //获得相应实体 HttpEntity entity = responce.getEntity(); System.out.println(Integer.toString(resStatu)); if (entity!=null) { html = EntityUtils.toString(entity);//获得html源代码 } } } catch (Exception e) { System.out.println("访问【"+url+"】出现异常!"); e.printStackTrace(); } finally { httpClient.getConnectionManager().shutdown(); } //System.out.println(html); return html; } 上述代码只能抓静态网页数据 麻烦看下上面代码怎么改才能获取动态网页数据啊
当网页采用js动态获取数据时,HttpClient应如何获取数据?
总的问题是这样的:因为我需要在两个城市来回跑,但是机票价格不断变化,就想通过.NET的HttpClient对携程网的网页进行访问,定时为每几小时一次,然后在后台进行一下分析,当某个机票价格贴近预期的最低价的时候通知我。 我用的VB.NET,但是C#应该更广泛,如果哪位大神可以帮忙回答用C#就可以。 代码如下,我先写了一个类 ``` Imports System.IO Imports System.Net.Http Public Class MySpider Dim callback As CallBackSub Public Sub CallBackTo(ByVal callclass As CallBackSub) callback = callclass End Sub Public Shared Async Sub GetPage(ByVal url As String, ByVal callclass As CallBackSub) Dim MyHttpClient As New HttpClient() Dim str As String = Await GetStringFromUrl(url) Dim callback0 As CallBackSub = callclass callback0.Invoke(str) End Sub Private Shared Async Function GetStringFromUrl(ByVal Url As String) As Task(Of String) Using client As HttpClient = New HttpClient() Try Dim response As HttpResponseMessage = Await client.GetAsync(Url) response.EnsureSuccessStatusCode() Dim responseBody As String = Await response.Content.ReadAsStringAsync() Return responseBody Catch e As HttpRequestException Console.WriteLine(vbLf & "Exception Caught!") Console.WriteLine("Message :{0} ", e.Message) Return Nothing End Try End Using End Function End Class ``` 这个类中的GetStringFromUrl是微软给的例程,然后我用了一个委托来把获取的字符串传递给Form窗体。(我的.NET仅仅勉强入门,正准备task和线程这些,就姑且用委托了,如果有正确的处理方法还麻烦告诉一下) 窗体代码就不贴出来了,就是一个textbox用来接收委托传过去的数据,然后一个button控制getpage 然后问题就在于,我发现我取出response中的数据后,根本找不到机票价格 ![图片说明](https://img-ask.csdn.net/upload/201901/29/1548767543_874475.jpg) 然后我在浏览器中把网页保存了之后,发现里面有很多js和css文件,我就想是不是有些数据是通过js动态获取的。 最后我试了Windows窗体控件WebBroswer,在赋值了URL之后,仅仅这一句代码就得到了我想要的机票价格数据 ``` TextBox1.Text = WebBrowser1.Document.All(1).InnerText ``` ![图片说明](https://img-ask.csdn.net/upload/201901/29/1548767560_985205.png) 虽然问题可以说暂时解决,但是我还是觉得,HttpClient作为微软推荐使用的一个类,应该不会处理不了这种动态获取数据的情况,就想请教下各位使用.NET得前辈,是否可以用HttpClient类处理这个问题呢? 如果能给出代码我会感激不尽,如果给一个资料的链接也一样很感谢!
使用java加载动态网页
最近遇到一个难题,使用httpclient获取数据的时候,获取不到动态加载的数据,尝试过htmlunit,也试过jrex,但是感觉效果都不是很好。 百度了一下,别人说phantomjs也不错,但是,没怎么学过js,不是很懂如何使用phantomjs获取整个网页数据。 求各位大神给一下使用java加载动态网页的方式。(除了htmlunit和jrex)或者说说如何使用phantomjs获取整个网页数据。 小弟在此不胜感激
Java爬虫如何实现在需要点击的网页中获取需要的内容
大佬们好!作为一个爬虫新手,最近在尝试用Java爬虫获取动态网页数据是遇到了一些问题。我要爬的网站在点击之后数据会产生一些变化,我在用select定位到我需要的数据后依然无法成功将其打印出来,想请教一下在这种情况下怎么获取我需要的数据。感谢!
python爬虫selenium+phantomjs获取JS动态网页
网页有大量数据在不断加载,如何连续获取这些内容,使用time.sleep()修改不同时间,但是得到的结果还是一样的,只有几个数据,这个问题怎么解决啊,求打救
echarts动态获取后台数据
一.现在我有JSP页面,页面里面有个div中有一个panel面板,面板种面嵌入的map地图。 ``` <div class="panel panel-default"> <div class="panel-heading"><h3 class="panel-title"><i class="fa fa-bar-chart-o fa-fw"></i>中国地图 </h3></div> <div class="panel-body"> <div style="mini-width:400px;height:350px" data-toggle="echarts" data-type="map" data-url="pop/echarts-mapData.html"></div> </div> </div> </div> ``` 二。其中,data-url="pop/echarts-mapData.html",引入的是一个外部html页面,但是里面是死数据,并且是JSON格式的数据。代码如下: ``` { "tooltip": { "trigger": "item" }, "setTheme": { "theme": "macarons" }, "legend": { "orient": "vertical", "x": "left", "data": [ "党员人数" ] }, "dataRange": { "min": 0, "max": 300, "x": "left", "y": "bottom", "text": [ "高", "低" ], "calculable": true }, "toolbox": { "show": true, "orient": "vertical", "x": "right", "y": "center", "feature": { "mark": { "show": true }, "dataView": { "show": true, "readOnly": false }, "restore": { "show": true }, "saveAsImage": { "show": true } } }, "series": [ { "name": "党员人数", "type": "map", "mapType": "重庆|江北区", "roam": false, "itemStyle": { "normal": { "label": { "show": true } }, "emphasis": { "label": { "show": true } } }, "data": [ { "name": "江北区", "value": 299 } ] } ] } ``` 三。很明显,↑↑↑↑↑↑上面的代码直接就是地图里面的各种参数(虽然数据是死的)。 图片效果如下: ![图片说明](https://img-ask.csdn.net/upload/201711/08/1510132266_325728.png) 问题: echarts的官网我也逛过多次了,但是例子都是新建的一个html网页,在里面加入的js代码,并配合ajax请求获取的后台数据。但是这样的话,加载出来的地图却是一个单独的html网页效果而已,并不能达到我嵌入JSP页面的div中这样的效果。 所以,请教各位能伸出援手,帮帮忙。---我的目的就是想,不要单独的一个html页面,而是就像上面的死数据一样,嵌入在JSP页面中,只是数据变为从后台获取而已。
java如何获取ajax网页内容
需求是填写一个jsp路径,在控制台返回该jsp生成的动态网页的html代码,我用的是HttpClient这个类实现的,但是返回的页面代码没有发送ajax请求获得数据,页面用浏览器打开是不完整的,求大神解答。
htmlunit爬取Ajax动态生成的网页获取不到ajax出来的数据
WebClient mWebClient = new WebClient(BrowserVersion.CHROME); mWebClient.getOptions().setUseInsecureSSL(true); mWebClient.getOptions().setCssEnabled(true); mWebClient.getOptions().setActiveXNative(true); mWebClient.getOptions().setJavaScriptEnabled(true); mWebClient.getOptions().setThrowExceptionOnScriptError(false); mWebClient.getOptions().setThrowExceptionOnFailingStatusCode(false); mWebClient.getOptions().setRedirectEnabled(true); mWebClient.getOptions().setTimeout(0); mWebClient.setJavaScriptTimeout(0); mWebClient.waitForBackgroundJavaScript(0); mWebClient.setAjaxController(new NicelyResynchronizingAjaxController()); final HtmlPage mHtmlPage = mWebClient.getPage("http://localhost:8080/#main/observationAnalysis/performance/performanceGlobal"); Thread.sleep(60000); ResponseUtils.renderText(response, mHtmlPage.asText()); ``` ```
怎么获取网站隐藏的动态的浏览次数和相关问题
现在我需要获取某网站页面浏览次数的实时数据,这个数据时在网页源代码中是隐藏和实时更新的,怎么批量获取并导出到excel里面,此外类推怎么获取相关的如标题之类的数据导出并保存,具体是怎么实现的。
哪位朋友能告诉我一下:对于36氪、知乎、网易新闻这类APP,详细内容页面是如何获取的
它们上面的详细页面中的内容是如何获取的,我自己理解的是APP端通过webview从网页端直接获取(而不是通过http连接让服务器端返回数据,然后动态添加到APP端的Imageview和textview来显示图片和内容,我对网页部分开发不是特别了解,如果说是通过webview获取的,那么有没有什么格式要求。求大神解答
请教如何用nodejs将网页转成jpg图片
公司用的nodejs部署的后台服务。现在想动态获取数据后,生成一张图片。思路是通过获取 的数据,访问指定的网页,然后通过截取网页来生成图片。不知道有没有什么比较好用的插件。 之前用了webshot,但是好像部署到服务器就出错了。也不知道为什么。想问问还有其他方法吗?
使用python抓取网站动态数据不能获取界面实际展示结果
目标路径:http://qy1.sfda.gov.cn/datasearch/face3/search.jsp?tableId=20 当前使用方式: #coding=utf-8 import urllib2 from bs4 import BeautifulSoup addr ='http://qy1.sfda.gov.cn/datasearch/face3/search.jsp?tableId=20' up = urllib2.urlopen(addr) html = up.read() print(html) 问题: 实际上需要网页打开展示的数据,但结果却获取到一堆script。 请大神指导一下!
flask 页面跳转到动态网页
现在有两个html文件,一个用来显示A班成绩另一个用来显示B班成绩,要获取两个班的成绩都必须通过服务器。现在想显示完A班成绩之后等待10秒跳转到B班。 之前试验了下,在html文件里使用js实现页面跳转到到另一个静态html文件(参考http://www.cnblogs.com/aszx0413/articles/1886819.html),但是这种方式只能跳转静态页面吧?怎么跳转到另一个能从服务器中获取数据的html文件? 本人小白,求解答
如何用Jsoup爬取网址中懒加载的图片地址?
RT,最近学习用Jsoup爬取极客公园网站的数据,但发现用这个开源库只能爬取到静态的数据,像是首页新闻的图片和作者的头像不能够爬取出来,想问下大神怎么爬取动态加载后的数据呢? 网址: https://www.geekpark.net/ 想爬取的数据: 新闻列表<article-item>下的文章图片<img-cover>和作者头像<img-box>的信息,发现待爬图片网址的属性是 lazy="loaded",在网页的操作是,当网页请滑到相应的位置时,对应的图片加载出来。 不知道这个是不是动态的数据,请大神指导,谢谢!! 想爬取网址的截图如下 ![想获取的两个图片链接](https://img-ask.csdn.net/upload/201809/29/1538234830_153852.png) ![用Jsoup获取到的document](https://img-ask.csdn.net/upload/201809/29/1538234867_764462.png)
jsoup 获取数据出错。换了代理ip也不行
如题。jsoup获取数据出错。用了代理去访问也不行。 先贴爬取页面的代码 ``` @Slf4j @Component public class SpiderUtil { @Resource private DynamicIpUtil dynamicIpUtil; /** * 根据url爬取页面信息 * * @param url url * @return 页面信息 */ public Document spiderDocument(String url) { Document pageDoc = null; try { Connection con= Jsoup.connect(url) .userAgent("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x)") .timeout(5000); /*.ignoreHttpErrors(true) .followRedirects(true)*/ Connection.Response resp = con.execute(); if (resp.statusCode() == 200){ pageDoc = con.get(); } else { log.error("http status error"); dynamicIpUtil.changeMyIp(); spiderDocument(url); } if(pageDoc == null || pageDoc.toString().trim().equals("")) {// 表示ip被拦截或者其他情况 log.error("ip被拦截 无内容"); dynamicIpUtil.changeMyIp(); spiderDocument(url); } } catch (Exception e) { log.error("ip被拦截 异常: {}", e); dynamicIpUtil.getMyIpInfo(); dynamicIpUtil.changeMyIp(); spiderDocument(url); } if (ipDefensed(url, pageDoc)) { // 如果被ip限制了,更换动态ip dynamicIpUtil.changeMyIp(); spiderDocument(url); } return pageDoc; } /** * 判断ip是否被封 * * @param pageDoc 页面信息 * @return ip */ private boolean ipDefensed(String url, Document pageDoc) { boolean ipDefensed = false; if (url.contains("anjuke.com")) { ipDefensed = AJKIpDefense(pageDoc); } return ipDefensed; } /** * 安居客判断ip是否被封 * * @param pageDoc 页面信息 */ private boolean AJKIpDefense(Document pageDoc) { log.error("ip 被拦截 安居客"); boolean ajkppDefensed = false; String title = pageDoc.title(); if (title.equals("访问验证-安居客")) { ajkppDefensed = true; } return ajkppDefensed; } } ``` 再贴换动态ip的代码 ``` @Slf4j @Component public class DynamicIpUtil { private static List<String[]> ipAndPorts = new ArrayList<String[]>(); private static Integer ipPageNum = 1; /** * 更换动态ip */ public void changeMyIp() { String [] ipAndPort = getDynamicIpAndPort(); String ip = ipAndPort[0]; String port = ipAndPort[1]; System.setProperty("http.maxRedirects", "50"); System.setProperty("https.maxRedirects", "50"); System.getProperties().setProperty("proxySet", "true"); System.getProperties().setProperty("http.proxyHost", ip); System.getProperties().setProperty("http.proxyPort", port); System.getProperties().setProperty("https.proxyHost", ip); System.getProperties().setProperty("https.proxyPort", port); } /** * 获取ip信息 */ public void getMyIpInfo(){ try { Document ipDoc = Jsoup.connect("http://www.ip.cn") .userAgent("Mozilla") .timeout(3000) .get(); if(ipDoc != null){ String ipInfo = ipDoc.select(".well").first().text(); log.info("更换ip 成功: {}", ipInfo); } } catch (Exception e) { log.info("暂不能获取ip 信息"); } } /** * 获取动态ip * * @return 动态ip */ private String[] getDynamicIpAndPort() { String[] ipAndPort = null; if (ipAndPorts != null && ipAndPorts.size() > 0) { ipAndPort = ipAndPorts.get(0); ipAndPorts.remove(0); } else { try { Document pageDoc = Jsoup.connect("http://www.xicidaili.com/wn/" + ipPageNum) .userAgent("Mozilla") .timeout(5000) .get(); Elements elements = pageDoc.select("tr.odd"); ipPageNum ++; if(ipPageNum > 400){ ipPageNum = 1; } for(Element element : elements){ String[] ipPort = new String[2]; String ip = element.child(1).text(); String port = element.child(2).text(); String noName = element.child(4).text(); // if(!noName.equals("高匿")){ // continue; // } String speedStr = element.child(6).select(".bar").first().attr("title"); double speed = Double.valueOf(speedStr.substring(0, speedStr.indexOf("秒"))); String timeStr = element.child(7).select(".bar").first().attr("title"); double time = Double.valueOf(timeStr.substring(0, timeStr.indexOf("秒"))); if(speed <= 1 && time <= 1){ ipPort[0] = ip; ipPort[1] = port; ipAndPorts.add(ipPort); } } return getDynamicIpAndPort(); } catch (IOException e) { log.error("get DynamicIpError error info :\n {}", e); } } return ipAndPort; } } ``` 如上。在获取这个网页上的数据的时候会出现问题 https://cd.zu.anjuke.com/fangyuan/p1/ 具体的错误有几种。 java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:150) at java.net.SocketInputStream.read(SocketInputStream.java:121) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) at java.io.BufferedInputStream.read(BufferedInputStream.java:345) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:703) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2000) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183) at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:563) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227) org.jsoup.HttpStatusException: HTTP error fetching URL at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:590) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:587) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227) java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 503 Too many open connections" at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2084) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183) at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:563) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227) java.net.SocketException: Unexpected end of file from server at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:790) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2000) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183) at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:563) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:587) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227) 请各位高手帮我看下。谢谢了。在线等。急急急急急急!!!!!
如何将Html网页生成的二维码图片保存成PNG图片文件存放到服务器上
目前已实现动态生成二维码图片,生成地址:http://wx.yseasy.com/erweima_1.asp?val=yyy 但需要将该图片保存下来以方便调用,目前想到有两种方案: 1、将图片的base64位编码保存到数据库,调用时解码显示//(这种方法小菜不知该如何获取它的base64位编码) 2、将图片保存成文件存放到服务器,再将图片路径保存到数据库,再调用显示//(这种方法小菜不知道该如何将此生成图保存为文件)
怎么把网页1的导航完美移植到网页2的轮播图上边的位置使导航和轮播图结合成一个网页
网页1带导航的 <!DOCTYPE html> <html> <head> <link rel="icon" href="images/favicon.ico" type="img/x-ico" /> <title>山东金泽网络科技有限公司</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta charset="utf-8"> <meta name="keywords" content="" /> <script type="application/x-javascript"> addEventListener("load", function () { setTimeout(hideURLbar, 0); }, false); function hideURLbar() { window.scrollTo(0, 1); } </script> <link href="css/bootstrap.css" rel='stylesheet' type='text/css' /> <link rel="stylesheet" href="css/flexslider.css" type="text/css" media="screen" property="" /> <link href="css/style.css" rel='stylesheet' type='text/css' /> <link href="css/simpleLightbox.css" rel='stylesheet' type='text/css' /> <link href="css/fontawesome-all.css" rel="stylesheet"> <link href="http://fonts.googleapis.com/css?family=Poppins:100i,200,200i,300,400,400i,500,500i,600,600i,700,700i,800" rel="stylesheet"> </head> <body> <header> <div class="header_top" id="home"> <nav class="navbar navbar-toggleable-md navbar-light bg-faded"> <a class="navbar-brand" href="index.html"> <i class="fab fa-digital-ocean"></i> 金泽科技</a> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mx-auto tp-nav text-center"> <li class="nav-item active"> <a class="nav-link" href="index.html">首页 <span class="sr-only">(current)</span> </a> </li> <li class="nav-item"> <a class="nav-link" href="about.html">关于</a> </li> <li class="nav-item"> <a class="nav-link" href="了解银豹.html">解决方案</a> </li> <li class="nav-item"> <a class="nav-link" href="blog.html">博客</a> </li> <li class="nav-item"> <a class="nav-link" href="contact.html">联系我们</a> </li> </ul> <form action="#" method="post" class="form-inline my-2 my-lg-0 search"> <input class="form-control mr-sm-2" type="search" placeholder="点击输入搜索..." name="Search" required> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">搜索</button> </form> </div> </nav> </div> </header> <!--//header--> </body> </html> ``` 网页2 轮播图代码: ``` <!DOCTYPE html> <html> <head> <link rel="icon" href="images/favicon.ico" type="img/x-ico" /> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>山东金泽网络科技有限公司</title> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div class="c-banner"> <div class="banner"> <ul> <li><img src="img/lunbo1.jpg"></li> <li><img src="img/lunbo2.jpg"></li> <li><img src="img/lunbo3.jpg"></li> </ul> </div> <div class="nexImg"> <img src="img/nexImg.png" /> </div> <div class="preImg"> <img src="img/preImg.png" /> </div> <div class="jumpBtn"> <ul> <li jumpImg="0"></li> <li jumpImg="1"></li> <li jumpImg="2"></li> </ul> </div> </div> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript"> //定时器返回值 var time=null; //记录当前位子 var nexImg = 0; //用于获取轮播图图片个数 var imgLength = $(".c-banner .banner ul li").length; //当时动态数据的时候使用,上面那个删除 // var imgLength =0; //设置底部第一个按钮样式 $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); //页面加载 $(document).ready(function(){ // dynamicData(); //启动定时器,设置时间为3秒一次 time =setInterval(intervalImg,3000); }); //点击上一张 $(".preImg").click(function(){ //清楚定时器 clearInterval(time); var nowImg = nexImg; nexImg = nexImg-1; console.log(nexImg); if(nexImg<0){ nexImg=imgLength-1; } //底部按钮样式设置 $(".c-banner .jumpBtn ul li").css("background-color","white"); $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nowImg).css("position","absolute"); $(".c-banner .banner ul img").eq(nexImg).css("position","relative"); //轮播淡入淡出 $(".c-banner .banner ul li").eq(nexImg).css("display","block"); $(".c-banner .banner ul li").eq(nexImg).stop().animate({"opacity":1},1000); $(".c-banner .banner ul li").eq(nowImg).stop().animate({"opacity":0},1000,function(){ $(".c-banner ul li").eq(nowImg).css("display","none"); }); //启动定时器,设置时间为3秒一次 time =setInterval(intervalImg,3000); }) //点击下一张 $(".nexImg").click(function(){ clearInterval(time); intervalImg(); time =setInterval(intervalImg,3000); }) //轮播图 function intervalImg(){ if(nexImg<imgLength-1){ nexImg++; }else{ nexImg=0; } //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nexImg-1).css("position","absolute"); $(".c-banner .banner ul img").eq(nexImg).css("position","relative"); $(".c-banner .banner ul li").eq(nexImg).css("display","block"); $(".c-banner .banner ul li").eq(nexImg).stop().animate({"opacity":1},1000); $(".c-banner .banner ul li").eq(nexImg-1).stop().animate({"opacity":0},1000,function(){ $(".c-banner .banner ul li").eq(nexImg-1).css("display","none"); }); $(".c-banner .jumpBtn ul li").css("background-color","white"); $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); } //轮播图底下按钮 //动态数据加载的试用应放在请求成功后执行该代码,否则按钮无法使用 $(".c-banner .jumpBtn ul li").each(function(){ //为每个按钮定义点击事件 $(this).click(function(){ clearInterval(time); $(".c-banner .jumpBtn ul li").css("background-color","white"); jumpImg = $(this).attr("jumpImg"); if(jumpImg!=nexImg){ var after =$(".c-banner .banner ul li").eq(jumpImg); var befor =$(".c-banner .banner ul li").eq(nexImg); //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nexImg).css("position","absolute"); $(".c-banner .banner ul img").eq(jumpImg).css("position","relative"); after.css("display","block"); after.stop().animate({"opacity":1},1000); befor.stop().animate({"opacity":0},1000,function(){ befor.css("display","none"); }); nexImg=jumpImg; } $(this).css("background-color","black"); time =setInterval(intervalImg,3000); }); }); //动态数据轮播图 //动态数据加载的时候不要直接点击demo.html运行否则可能请求不到本地json数据 // function dynamicData(){ // $.ajax({ // url:"js/test.json", // type:"get", // dataType:"json", // success:function(data){ // if(data.code==1){ // var data = data.data; // $.each(data,function(i){ // $(".c-banner .banner ul").append('<li><img src="'+this.img+'"></li>'); // $(".c-banner .jumpBtn ul").append('<li jumpImg="'+i+'"></li>') // }) // } // //获取图片总数量 // imgLength = $(".c-banner .banner ul li").length; // //为底部按钮定义单击事件 // $(".c-banner .jumpBtn ul li").each(function(){ // //为每个按钮定义点击事件 // $(this).click(function(){ // clearInterval(time); // $(".c-banner .jumpBtn ul li").css("background-color","white"); // jumpImg = $(this).attr("jumpImg"); // if(jumpImg!=nexImg){ // var after =$(".c-banner .banner ul li").eq(jumpImg); // var befor =$(".c-banner .banner ul li").eq(nexImg); // // //将当前图片试用绝对定位,下一张图片试用相对定位 // $(".c-banner .banner ul img").eq(nexImg).css("position","absolute"); // $(".c-banner .banner ul img").eq(jumpImg).css("position","relative"); // // after.css("display","block"); // after.stop().animate({"opacity":1},1000); // befor.stop().animate({"opacity":0},1000,function(){ // befor.css("display","none"); // }); // nexImg=jumpImg; // } // $(this).css("background-color","black"); // time =setInterval(intervalImg,3000); // }); // }); // } // }) // } </script> <div style="text-align:center;margin:10px 0; font:normal 14px/24px 'MicroSoft YaHei';"> </div> </body> </html> ``` ```
使用什么方法抓取淘宝、天猫、京东和当当网的店铺和商品信息?
由于这些电商网站有一部分产品信息是通过JS脚本动态填充进去的,能直接在网页源码里面获取到的产品信息相当有限,请问各位大神使用什么技术可以抓取到店铺和商品的完整信息?
爬虫爬取1688返回response成功但是内容为空?
今天尝试写了一个爬取1688商品页的爬虫,发现1688的代码已经不同于几年前了,前台的页面html代码居然是通过js请求返回json数据中的值解析而来,整个动态加载的html被全部封装。在网页前台浏览的时候也能明显感觉到,整个商品页不是全部一次加载完成,随着鼠标的下滑进行动态加载,直至翻页出现。找了一下网上的爬取代码,不是代码太旧就是使用selenium,因此我尝试从解析js角度来看看能否爬到数据。 我搜索的关键词为:大理石餐盘,访问的url为:https://s.1688.com/selloffer/offer_search.htm?keywords=%B4%F3%C0%ED%CA%AF%B2%CD%C5%CC&n=y&netType=1%2C11&spm=a260k.635.3262836.d102 通过抓包可以发现实际上每个页面的动态加载通过如下的js文件加载: ![图片说明](https://img-ask.csdn.net/upload/201903/14/1552530583_824631.png) 同时可以看到头部信息为: ![图片说明](https://img-ask.csdn.net/upload/201903/14/1552530839_105546.jpg) 因此我编写了代码来请求此url,想要获取其中的数据 通过分析url,我发现其实只有几个关键的参数在发生作用,我修改了url如下: https://s.1688.com/selloffer/rpc_async_render.jsonp?keywords=%B4%F3%C0%ED%CA%AF%B2%CD%C5%CC&beginPage=2&startIndex=40&templateConfigName=marketOfferresult&async=true&enableAsync=true 将比较关键的参数罗列:keywords,beginpage ,startindex(本页中以0.20.40循环),templateconfigname,async,enableasync 从页面请求的结果如下 https://s.1688.com/selloffer/rpc_async_render.jsonp?keywords=%B4%F3%C0%ED%CA%AF%B2%CD%C5%CC&beginPage=2&startIndex=40&templateConfigName=marketOfferresult&async=true&enableAsync=true ![图片说明](https://img-ask.csdn.net/upload/201903/14/1552531339_315690.jpg) 依据上面的分析我编写了代码: ``` ''' 得到单页商品信息 ''' try: print('正在爬取第%d页' % page) for startindex in range(0, 2): proxy = get_proxy() url = 'https://s.1688.com/selloffer/rpc_async_render.jsonp' data = { 'keywords': KEYWORD, # 搜索关键词, 'beginpage': str(page), # 页数 'templateConfigName': TemplateConfigName, 'startIndex': str(startindex*20), 'async': 'true', 'enableAsync': 'true' } headers = { 'User_Agent': random.choice(USER_AGENT), 'Referer':'https://s.1688.com/selloffer/offer_search.htm?keywords=' + quote( KEYWORD) + '&n=y&netType=1%2C11&spm=a260k.635.3262836.d102&offset=9&filterP4pIds=580281266813,551252714239,554311584303,554434844511,576452898982,567623615791,1264995609,584747673985', 'Cookie': COOKIE, } proxies = {"http": "http://{}".format(proxy)} response = requests.get(url=url, headers=headers, params=data, proxies=proxies, timeout=5) time.sleep(1) if response.status_code == 200: print(response.text) data = response.json() get_info(data=data) except Exception as e: print(e.args) print('出现异常,重新爬取第%d页' % page) return get_one_page(page) ``` ``` 其中请求头是参照抓包的请求头进行了伪装,user_agent使用了随机代理池中的代理。 ip应用了代理池中的代理进行切换, 测试代码发现虽然返回成功,但是内容为空: 测试代码的结果如下: ``` ``` 正在爬取第1页_ ({ "hasError":false, "message":"success", "content":{ "offerResult":{ "html":"" }, "beaconP4Pid":"1552531611011186199615", "tracerId":"1191031861991552531610953000954", "end":0 } }) ``` 很明显服务器判断出来我是机器人,我检查了一下cookies还有ip以及header都没有问题 使用同样的参数在浏览器页面请求也能访问正常的结果,因此我决定增加更多的参数,也许是因为服务器 端验证会检测某个参数是否存在来判断请求来自机器人还是真正的用户,我将代码修改如下: ``` def get_one_page(page): ''' 得到单页商品信息 ''' try: print('正在爬取第%d页' % page) for startindex in range(0, 2): proxy = get_proxy() url = 'https://s.1688.com/selloffer/rpc_async_render.jsonp' data = { 'keywords': KEYWORD, # 搜索关键词, 'beginpage': str(page), # 页数 'templateConfigName': TemplateConfigName, 'startIndex': str(startindex*20), 'async': 'true', 'enableAsync': 'true', 'rpcflag': 'new', '_pageName_': 'market', 'offset': str(9), 'pageSize': str(60), 'asyncCount': str(20), 'n': 'y', 'netType': '1%2C11', 'uniqfield': 'pic_tag_id', 'qrwRedirectEnabled': 'false', 'filterP4pIds': '550656542618%2C554434844511%2C574540124248%2C568185683625%2C567623615791%2C536778930216%2C577066747130%2C555894336804', 'leftP4PIds': '', 'pageOffset': str(3) } headers = { 'User_Agent': random.choice(USER_AGENT), 'Referer':'https://s.1688.com/selloffer/offer_search.htm?keywords=' + quote( KEYWORD) + '&n=y&netType=1%2C11&spm=a260k.635.3262836.d102&offset=9&filterP4pIds=580281266813,551252714239,554311584303,554434844511,576452898982,567623615791,1264995609,584747673985', 'Cookie': COOKIE, } proxies = {"http": "http://{}".format(proxy)} response = requests.get(url=url, headers=headers, params=data, proxies=proxies, timeout=5) time.sleep(1) if response.status_code == 200: print(response.text) data = response.json() get_info(data=data) except Exception as e: print(e.args) print('出现异常,重新爬取第%d页' % page) return get_one_page(page) ``` 测试的结果如下: ``` 正在爬取第1页 ({ "hasError":false, "message":"success", "content":{ "offerResult":{ "html":" \n \n <!-- 为打点计算 offerindex 值-->\n \n \n <!-- 用于异步请求 -->\n \n\n <div id=\"sm-maindata-script\">\n <script type=\"text\/javascript\">\n var coaseParam = {\n \'isCoaseOut\':true\n };\n <\/script>\n <script type=\"text\/javascript\">\n var rightP4P = {\n industryTagPath:\'\',\n leftP4PId:\'\',\n leftP4PLoginId:\'\',\n biaowangId:\'\'\n };\n var rightP4Poffer =[\n ];\n<\/script>\n <\/div>\n \n\n" }, "beaconP4Pid":"1552532048109186199394", "tracerId":"1191031861991552532048084000548", "end":0 } }) ``` 很遗憾结果并不理想,仍旧没有办法获得真正的数据。 我分析了还没有被我列进去的参数,因为无法寻找到其规律所以就没有加上去。 难道1688现在已经做到了,机器人无法爬的地步了吗,到底应该如何解决呢。有没有大神能够指点一下: 另外我同样的测试了一下1688的热销市场,同样的方式,没有问题可以爬取到js的内容,只不过数据是直接封装在json返回值中的,不是通过html代码二次封装。
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
【资源】一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)【内附资源页】
声明: 1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个沉迷 Chrome 不能自拔的蒟蒻… 作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥,当我第一次了解 Chrome 的时候,就被它的美貌给吸引住了… 就在我用了一段时间之后,我坚决的卸载了电脑上其它碍眼的浏览器,并觉得在之前的搬砖生涯中,我不配当哥,我只配是个沙雕… ...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
立即提问