精华内容
下载资源
问答
  • java+jsoup抓取网页数据

    2018-12-21 14:12:58
    使用java+jsoup进行网页数据抓取,提取自己想要的数据
  • delphi抓取网页数据

    2018-09-17 16:29:32
    delphi抓取122考试平台预约学员数据 ,方便提前知道预约情况
  • 主要介绍了php通过curl添加cookie伪造登陆抓取数据方法,涉及PHP基于curl操作cookie及页面抓取的相关技巧,需要的朋友可以参考下
  • java抓取网页数据获取网页中所有的链接实例分享,使用方法,只要实例化HtmlParser时传入网页地址就可以了
  • Java抓取网页数据Demo

    千次下载 热门讨论 2012-08-26 14:14:11
    Java抓取网页数据的两种方法:(1)抓取网页 (2)抓取网页JS返回数据
  • java网页抓取数据

    2014-05-11 23:41:43
    java网页抓取数据
  • Java网页抓取数据

    2014-04-16 09:50:37
    Java网页抓取数据
  • 在编写爬虫进行网页数据抓取的时候,经常会遇到这种需要动态加载数据的HTML网页,如果还是直接从网页抓取那么将无法获得任何数据。 今天,我们就在这里简单聊一聊如何用python来抓取页面中的JS动态加载的数据。 给...
  • java抓取网页数据实现

    2014-11-14 15:59:12
    java抓取网页数据实现
  • htmlparser实现从网页抓取数据
  • Python的网页数据抓取,表格的制作,CSS文件的生成,字体的改变
  • 主要介绍了php使用curl和正则表达式抓取网页数据示例,这里是抓取某网站的小说,需要的朋友可以修改一下抓取其它数据
  • 本文给大家介绍PHP网页抓取之抓取百度贴吧邮箱数据代码分享,程序实现了一键抓取帖子全部邮箱和分页抓取邮箱两个功能,感兴趣的朋友一起学习吧
  • 爬虫抓取网页数据

    2015-07-23 13:42:56
    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。具体功能是,通过scrapy和Python编程对BBS网站进行抓取数据
  • 主要介绍了C#使用WebClient登录网站并抓取登录后的网页信息实现方法,涉及C#基于会话操作登陆网页及页面读取相关操作技巧,需要的朋友可以参考下
  • 网页数据自动抓取数据,自动填写

    热门讨论 2012-12-21 23:18:57
    自动抓取Salseforce.com页面信息到本地数据库,采用Delphi2010,可以进行不同页面数据间自动复制填写,采用IHTMLDocument2,提供关键代码
  • vba抓取网页数据

    千次阅读 2019-09-11 21:02:12
    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 'DataObject对象,数据放入剪贴板,记事本观察数据 .SetText tt '因为XMLHTTP默认是UTF-8,不能识别gb2312,会发现数据乱码 .PutInClipboard '...

    功能实现:自动计算国庆期间在个个城市停留的时间(乱码转码,html截取、日历、下拉,两个网站:携程和火车票网)

    Function getTrainInfo_ctrip(rowNum)
        
        If Range("A" & rowNum).Value = "" Then
            Range("B" & rowNum & ":C" & rowNum).Delete
            Exit Function
        End If
        Dim strRespText$, tt$
        Dim URL
        URL = "https://trains.ctrip.com/trainbooking/TrainSchedule/" & Range("A" & rowNum).Value
        'Debug.Print URL
        With CreateObject("Microsoft.XMLHTTP")
            .Open "GET", URL, False                     '要抓取的链接,"GET"尽量用大写,以免某些系统不兼容
            .Send
            
            Index = InStr(.responsetext, "<div id=""ctl00_MainContentPlaceHolder_pnlResult"">")
            If Index <= 0 Then
                Range("B" & rowNum & ":C" & rowNum).Delete
                Range("B" & rowNum) = "查无此车"
                Exit Function
            End If
            
            tt = Mid(.responsetext, Index)
            Index2 = InStr(tt, "ctl00_MainContentPlaceHolder_divStartAndEndSchedule")
            tt = Left(tt, Index2 - 44)
            
            'Set fs = CreateObject("Scripting.FileSystemObject")
            'Set a = fs.CreateTextFile("D:\Document\excel\log.txt", True)
            'a.write (tt)
            'a.Close
        End With
        
        Set oDom = CreateObject("htmlfile")
        oDom.body.innerHTML = tt
        
        'Debug.Print oDom.getElementById("ctl00_MainContentPlaceHolder_pnlResult").innerText
        Set oTbody = oDom.getElementById("ctl00_MainContentPlaceHolder_pnlResult").getElementsByTagName("div")(2).getElementsByTagName("table")(1).getElementsByTagName("tbody")(0)
        'Debug.Print oTbody.innerText
        'Debug.Print oTbody.Rows.Length
        
        Dim allCity As String
        allCity = ""
        'Integer String
        Dim startPlace, endPlace As Integer
        startPlace = 0
        endPlace = 0
        'Debug.Print Range("B" & rowNum).Value
        
        If Range("B" & rowNum).Value = "" Then
                Range("B" & rowNum) = oTbody.Rows(0).Cells(2).innerText
        End If
        If Range("C" & rowNum).Value = "" Then
            Range("C" & rowNum) = oTbody.Rows(oTbody.Rows.Length - 1).Cells(2).innerText
        End If
    
        For i = 1 To oTbody.Rows.Length
            allCity = allCity & "," & oTbody.Rows(i - 1).Cells(2).innerText
            'Debug.Print oTbody.Rows(i - 1).Cells(2).innerText
            'Debug.Print InStr(Range("B" & rowNum).Value, oTbody.Rows(i - 1).Cells(2).innerText)
            
            If startPlace = 0 And InStr(Range("B" & rowNum).Value, oTbody.Rows(i - 1).Cells(2).innerText) > 0 Then
                startPlace = i
                'Debug.Print startPlace
            End If
            
            If endPlace = 0 And InStr(Range("C" & rowNum).Value, oTbody.Rows(i - 1).Cells(2).innerText) > 0 Then
                endPlace = i
                'Debug.Print endPlace
            End If
            
        Next
        
        If startPlace = 0 Then
            Range("B" & rowNum) = oTbody.Rows(0).Cells(2).innerText
            startPlace = 1
        End If
        
        If endPlace = 0 Then
            Range("C" & rowNum) = oTbody.Rows(oTbody.Rows.Length - 1).Cells(2).innerText
            endPlace = oTbody.Rows.Length
        End If
        
        Set oSelect = Range("B" & rowNum & ":C" & rowNum)
        With oSelect.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=allCity
        End With
        
        Range("D" & rowNum) = oTbody.Rows(startPlace - 1).Cells(4).innerText
        Range("E" & rowNum) = oTbody.Rows(endPlace - 1).Cells(4).innerText
        
    End Function
    'http://search.huochepiao.com/checi/C7140
    Function getTrainInfo_huochepiao(rowNum)
        
        If Range("A" & rowNum).Value = "" Then
            Range("C" & rowNum & ":D" & rowNum).Delete
            Exit Function
        End If
        If Range("B" & rowNum).Value = "" Then
            Range("B" & rowNum) = Date
        End If
        Dim strRespText$, tt$
        Dim URL
        URL = "http://search.huochepiao.com/checi/" & Range("A" & rowNum).Value
        'Debug.Print URL
        With CreateObject("Microsoft.XMLHTTP")
            .Open "GET", URL, False                     '要抓取的链接,"GET"尽量用大写,以免某些系统不兼容
            .Send
            
            tt = .responsetext
            With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")    'DataObject对象,数据放入剪贴板,记事本观察数据
                .SetText tt                                                    '因为XMLHTTP默认是UTF-8,不能识别gb2312,会发现数据乱码
                .PutInClipboard                                                '所以不能采用.responsetext对象来得到字符串
            End With
            tt = StrConv(.ResponseBody, vbUnicode)
            
            Index = InStr(tt, "</table><br><table border=")
            If Index <= 0 Then
                Range("C" & rowNum & ":D" & rowNum).Delete
                Range("C" & rowNum) = "查无此车"
                Exit Function
            End If
            tt = Mid(tt, Index + 12)
            Index2 = InStr(tt, "</td></tr></table>")
            tt = Left(tt, Index2 + 18)
            
            'Debug.Print tt
            
            Set fs = CreateObject("Scripting.FileSystemObject")
            Set a = fs.CreateTextFile("D:\Document\excel\log.txt", True)
            a.write (tt)
            a.Close
            
        End With
        
        Set oDom = CreateObject("htmlfile")
        oDom.body.innerHTML = tt
        
        Set oTbody = oDom.getElementsByTagName("td")
    
        'Debug.Print oTbody.Length
        '84-
        'Debug.Print oTbody(14).innerText
        
        Dim allCity As String
        allCity = ""
        'Integer String
        Dim startPlace, endPlace As Integer
        startPlace = 0
        endPlace = 0
        'Debug.Print Range("C" & rowNum).Value
        
        Dim startNum, stepNum, endCityDataNum As Integer
        If oTbody(9).innerText = "硬座" Then
            startNum = 15
            stepNum = 13
            endCityDataNum = 11
        ElseIf oTbody(9).innerText = "硬卧上/中/下" Or oTbody(9).innerText = "商务座" Then
            startNum = 14
            stepNum = 12
            endCityDataNum = 10
        Else
            Exit Function
        End If
        If Range("C" & rowNum).Value = "" Then
                Range("C" & rowNum) = oTbody(startNum).innerText
        End If
        If Range("D" & rowNum).Value = "" Then
            Range("D" & rowNum) = oTbody(oTbody.Length - endCityDataNum).innerText
        End If
        
        'Debug.Print "startNum"; startNum; "oTbody.Length"; oTbody.Length
        For i = startNum To oTbody.Length Step stepNum
            allCity = allCity & "," & oTbody(i).innerText
            'Debug.Print oTbody(i).innerText
            'Debug.Print InStr(Range("C" & rowNum).Value, oTbody.Rows(i - 1).Cells(2).innerText)
            
            If startPlace = 0 And InStr(Range("C" & rowNum).Value, oTbody(i).innerText) > 0 Then
                startPlace = i
                'Debug.Print startPlace
            End If
            
            If endPlace = 0 And InStr(Range("D" & rowNum).Value, oTbody(i).innerText) > 0 Then
                endPlace = i
                'Debug.Print endPlace
            End If
            
        Next
        
        If startPlace = 0 Then
            Range("C" & rowNum) = oTbody(startNum).innerText
            startPlace = startNum
        End If
        
        If endPlace = 0 Then
            Range("D" & rowNum) = oTbody(oTbody.Length - endCityDataNum).innerText
            endPlace = oTbody.Length - endCityDataNum
        End If
        
        Set oSelect = Range("C" & rowNum & ":D" & rowNum)
        With oSelect.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=allCity
        End With
        
        
        Range("E" & rowNum) = Range("B" & rowNum).Value & " " & oTbody(startPlace + 2).innerText
    
        Dim startUseTime, endUseTime As Integer
        
        Dim s
        Dim midString As String
    
        If InStr(oTbody(startPlace + 4).innerText, "小时") > 0 Then
            midString = Replace(oTbody(startPlace + 4).innerText, "小时", ":")
            s = Split(Replace(midString, "分", ""), ":")
            startUseTime = s(0) * 60 + s(1)
            
        Else
            startUseTime = Replace(oTbody(startPlace + 4).innerText, "分", "")
        End If
        
        If InStr(oTbody(endPlace + 4).innerText, "小时") > 0 Then
            midString = Replace(oTbody(endPlace + 4).innerText, "小时", ":")
            s = Split(Replace(midString, "分", ""), ":")
            endUseTime = s(0) * 60 + s(1)
        Else
            endUseTime = Replace(oTbody(endPlace + 4).innerText, "分", "")
        End If
        
        'Debug.Print startUseTime
        'Debug.Print endUseTime
        'Debug.Print Range("E" & rowNum).Value
        'Debug.Print Format$(CDate((endUseTime - startUseTime) / 1440 + CDate(Range("E" & rowNum).Value)), "yyyy-mm-dd hh:mm:ss")
        Range("F" & rowNum) = Format$(CDate((endUseTime - startUseTime) / 1440 + CDate(Range("E" & rowNum).Value)), "yyyy-mm-dd hh:mm:ss")
        
    End Function
    Sub test()
        Range("B" & 1) = "查询中、、、"
        'getTrainInfo_huochepiao (10)
        For i = 3 To 20
            getTrainInfo_huochepiao (i)
        Next
        
        Range("B" & 1) = "查询完毕"
    End Sub
    

    效果截图:(求偶遇哈哈!!!)

    源文档已经上传:https://download.csdn.net/download/struggletolife/11723002

    展开全文
  • RPA之家全套视频教程,想系统学习RPA的,可以下载该资源学习。在学习的过程中,如果碰到任何问题,也可以在评论区里面交流。
  • 从网页抓取数据一般方法

    万次阅读 热门讨论 2007-12-28 01:08:00
    首先要了解对方网页的运行机制 ,这可以用httpwacth或者httplook来看一下http发送和接收的数据。这两个工具应该说是比较简单易懂的。这里就不再介绍了。主要关注的内容是header和post的内容。一般会包括cookie,...

    首先要了解对方网页的运行机制 ,这可以用httpwacth或者httplook来看一下http发送和接收的数据。这两个工具应该说是比较简单易懂的。这里就不再介绍了。主要关注的内容是header和post的内容。一般会包括cookie,Referer页面和其他一些乱其八糟可能看不懂的变量,还有就是正常交互的参数,比如需要post或者get的querystring所包含的东西。

    httplook和httpwacth 网上有很多下载的,这里推荐使用httpwach,因为可以直接嵌入到ie中,个人觉得这个比较好用。这两个工具可以到我上传在csdn的资源中下载,地址为

    http://download.csdn.net/user/jinjazz

    这里简单给出一段可以抓取数据的c#代码,比如登录某个网站,获取登录成功后的html代码,供数据分析使用。

    private   void  login()
            
    {
                System.Net.WebClient wb 
    =   new  System.Net.WebClient();

                System.Collections.Specialized.NameValueCollection header 
    =   new  System.Collections.Specialized.NameValueCollection();
                header.Add(
    " Cookie " " czJ_cookietime=2592000; czJ_onlineusernum=1651; czJ_sid=w4bGJd " );
                header.Add(
    " Referer " @" http://www.test_by_jinjazz.com.cn/bbs/login.php " );
                wb.Headers.Add(header);
                System.Collections.Specialized.NameValueCollection data 
    =   new  System.Collections.Specialized.NameValueCollection();
                data.Add(
    " formhash " " ebd2faac " );
                data.Add(
    " referer " " http://www.test_by_jinjazz.com.cn/bbs/search.php " );
                data.Add(
    " loginfield " " username " );
                data.Add(
    " username " " jinjazz " );
                data.Add(
    " password " " 999 " );
                data.Add(
    " questionid " " 0 " );
                data.Add(
    " answer " "" );
                data.Add(
    " cookietime " " 2592000 " );
                data.Add(
    " loginmode " "" );
                data.Add(
    " styleid " "" );
                data.Add(
    " loginsubmit " " 提交 " );

                
    byte [] b  =  wb.UploadValues( " http://www.test_by_jinjazz.com.cn/bbs/login.php " " Post " , data);
                
    string  strData  =  System.Text.Encoding.Default.GetString(b);
                Console.WriteLine(strData);
            }

    以上代码除了三个url之外其他数据都是真实的,其中header和data中的参数和值都是用httpwatch来监测后得到。

     

    展开全文
  • 一个简单的python示例,实现抓取 嗅事百科 首页内容 ,大家可以自行运行测试
  • 抓取网页数据的几种方法

    千次阅读 2017-02-17 23:12:09
    相信所有个人网站的站长都有抓取别人数据的经历吧,目前抓取别人网站数据的方式无非两种方式:  一、使用第三方工具,其中最著名的是火车头采集器,在此不做介绍。  二、自己写程序抓取,这种方式要求站长...
    相信所有个人网站的站长都有抓取别人数据的经历吧,目前抓取别人网站数据的方式无非两种方式:
    

      一、使用第三方工具,其中最著名的是火车头采集器,在此不做介绍。

      二、自己写程序抓取,这种方式要求站长自己写程序,可能对对站长的开发能力有所要求了。

      本人起初也曾试着用第三方的工具抓取我所需要的数据,由于网上的流行的第三方工具不是不符合我的要求,就是过于复杂,我一时没有搞明白怎么用,后来索性决定自己写吧,现在本人基本上半天可以搞定一个网站(只是程序开发时间,不包括数据抓取的时间)。

        经过一段时间的数据抓取生涯,也曾遇到了很多困难,其中最常见的一个就是关于分页数据的抓取问题,原因在于分数据分页的形式有很多种,下面我主要针对三种形式介绍一下抓取分页数据的方法,此类文章虽然在网上见过很多,但每次拿别人的代码总也总是有各种各样的问题,下面各种方式的代码都是能正确执行,并且我目前也正在使用中的。本文中代码实现是用C#语言来实现的,我想其他语言原理大致相同

    下面切入正题:

         第一种方式:URL地址中包含分页信息,这种形式是最简单的,这种形式使用第三方工具抓取也很简单,基本上不用写代码,对于我这种宁可自己花个半天时间写代码也懒得学第三方工具的人,还是通过自己写代码实现了;

        这种方式就是通过循环生成数据分页的URL地址 如: 这样通过HttpWebRequest访问对应URL地址,返回对应页面的html文本,接下来的任务就是对字符串的解析,将需要的内容保存到本地数据库内;抓取的代码可参考下面:

     public string GetResponseString(string url)
            {
                
                string _StrResponse = "";
                HttpWebRequest _WebRequest = (HttpWebRequest)WebRequest.Create(url);
                _WebRequest.UserAgent = "MOZILLA/4.0 (COMPATIBLE; MSIE 7.0; WINDOWS NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                _WebRequest.Method = "GET";
                WebResponse _WebResponse = _WebRequest.GetResponse();
                StreamReader _ResponseStream = new StreamReader(_WebResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));
                _StrResponse = _ResponseStream.ReadToEnd();
                _WebResponse.Close();
                _ResponseStream.Close();
                return _StrResponse;
            }   

    上面的代码可以返回对应页面的html内容的字符串,剩下的工作就是从这个字符串中获取自己关心的信息了。

    第二种方式:可能是通过asp.net开发的网站常会遇到,它的分页控件通过post方式 提交分页信息到后台代码,如.net下Gridview自带的分页功能,当你点击分页的页码时,会发现URL地址没有变化,但页码变化了,页面内容也变化,仔细看会发现,把鼠标移到每个页码上的时候状态栏会显示 javascript:__dopostback("gridview","page1")等等 之类的代码,这种形式其实也不是很难,因为毕竟有地方得到页码的规律可寻。

       我们知道http请求提交的方式有两种一种是get一种是Post,第一种方式是get方式,那么第二种方式就是post方式,具体提交的原理不必细说,不是本文的重点

    抓取这种页面 需要注意asp.net页面的几个重要的元素

       一、 __VIEWSTATE ,这个应该是.net特有的,也是让.net开发人员既爱又恨的东西,当你打开一个网站的某一个页面的时候,如果发现这个东西,而且后面还跟随着一大堆乱七八糟的字符的时候,那这个网站肯定是用asp.net写的了;

       二、__dopostback方法,这个是asp.net页面自动生成一个javascript方法,包含两个参数,__EVENTTARGET,__EVENTARGUMENT,这两个参数可以参看页码对应的内容,因为点击翻页的时候,会将页码信息传给这两个参数。

       三、__EVENTVALIDATION 这个也也应该是asp.net特有的东西

    大家也不用 太关心这三个东西都是干什么的,只需要注意自己写代码抓取页面的时候 记得提交这三个元素就可以了。

        和第一种方式一样,肯定要通过循环的方式是去拼凑_dopostback的两个参数,只需要拼其中包含了页码信息的参数即可。这里有一个需要注意的地方,就是在每次通过Post提交请求下一页的时候,先应得到当前页的__VIEWSTATE 信息和__EVENTVALIDATION信息,所以分页数据的第一页可采用第一种方式得到页码内容然后,同时取出对应的__VIEWSTATE 信息和__EVENTVALIDATION信息,然后再做循环处理下一页面,然后每抓取完一个页面,再记录下__VIEWSTATE 信息和__EVENTVALIDATION信息,为下一个页面post提交数据使用

    参考代码如下:

     for (int i = 0; i < 1000; i++)
                {
                    System.Net.WebClient WebClientObj = new System.Net.WebClient();
                    System.Collections.Specialized.NameValueCollection PostVars = new System.Collections.Specialized.NameValueCollection();
                    PostVars.Add("__VIEWSTATE", "此处是您需要提前得到的信息");
                    PostVars.Add("__EVENTVALIDATION", "此处是您需要提前得到的信息");
                    PostVars.Add("__EVENTTARGET", "此处是__dopostback方法对应的参数");
                    PostVars.Add("__EVENTARGUMENT",  "此处是__dopostback方法对应的参数");
                    WebClientObj.Headers.Add("ContentType", "application/x-www-form-urlencoded");
                    try
                    {
                        byte[] byte1 = WebClientObj.UploadValues("http://www.xxxx.cn/messagelist.aspx", "POST", PostVars);
                        string ResponseStr = Encoding.UTF8.GetString(byte1); //得到当前页面对应的html 文本字符串
                        GetPostValue(ResponseStr);//得到当前页面对应的 __VIEWSTATE 等上面需要的信息,为抓取下一页面使用
                        SaveMessage(ResponseStr);//保存自己关心的内容到数据库中
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }

    第三种方式是最麻烦的,也是最恶心的,这种页面 在你翻页的过程中没有任何一个地方可以找到页码信息,这种方式费了我很大的力气,后来采用了一个比较狠的办法,用代码模拟手动翻页,这种方式应该可以处理任何形式的翻页数据,原理就是,用代码模拟人工点击翻页链接,用代码一页一页的翻页,然后一页一页的抓取。

    如果想了解更多的信息 可访问  http://www.zxskb.com/bbs/3.html

    这个是我个人站上 新建的一个站长随笔功能,我会定期发布一些我的个人心得,如果有兴趣的可以去看看,本贴算是我第一个随笔吧
    展开全文
  • 基于PowerBuilder 的网页数据抓取
  • 使用CURL抓取网页数据

    2012-11-05 12:19:51
    一个完整的使用CURL抓取网页数据 使用stl string分析网页数据,将提取的数据输出到log.txt中
  • 主要介绍了JAVA使用爬虫抓取网站网页内容的方法,实例分析了java爬虫的两种实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 用java实现爬虫抓取网页中的表格数据功能源码

    千次下载 热门讨论 2016-12-20 10:52:27
    使用java代码基于MyEclipse开发环境实现爬虫抓取网页中的表格数据,将抓取到的数据在控制台打印出来,需要后续处理的话可以在打印的地方对数据进行操作。包解压后导入MyEclipse就可以使用,在TestCrawTable中右键...
  • lablview 网页抓取天气预报。利用前面板的.net容器,插入.net控件(WebBrowser),调用Navigate2方法,输入URL,然后其属性Dcument获得数据。。。。
  • 用VBA抓取网页数据

    2012-08-19 20:53:31
    用VBA抓取网页数据有不少方法,其中一种便是引用XMLHTTP对象。在这里尝试为大家介绍一下这个对象的一些基本属性和方法还有一些应用示例。
  • r语言抓取网页数据by Hiren Patel... 使用R进行网页抓取的简介 (An introduction to web scraping using R) With the e-commerce boom, businesses have gone online. Customers, too, look for products online. Un...

    r语言抓取网页数据

    by Hiren Patel

    希伦·帕特尔(Hiren Patel)

    使用R进行网页抓取的简介 (An introduction to web scraping using R)

    With the e-commerce boom, businesses have gone online. Customers, too, look for products online. Unlike the offline marketplace, a customer can compare the price of a product available at different places in real time.

    随着电子商务的繁荣,企业已经上网。 客户也在线寻找产品。 与离线市场不同,客户可以实时比较不同地方的可用产品价格。

    Therefore, competitive pricing is something that has become the most crucial part of a business strategy.

    因此,竞争性定价已成为业务战略中最关键的部分。

    In order to keep prices of your products competitive and attractive, you need to monitor and keep track of prices set by your competitors. If you know what your competitors’ pricing strategy is, you can accordingly align your pricing strategy to get an edge over them.

    为了使您的产品价格具有竞争力和吸引力,您需要监视并跟踪竞争对手确定的价格。 如果您知道竞争对手的定价策略是什么,则可以相应地调整定价策略以获取竞争优势。

    Hence, price monitoring has become a vital part of the process of running an e-commerce business.

    因此,价格监控已成为运行电子商务业务过程的重要组成部分。

    You might wonder how to get hold of the data to compare prices.

    您可能想知道如何掌握数据以比较价格。

    获取价格比较所需数据的3种主要方法 (The top 3 ways of getting the data you need for price comparison)

    1.商人的饲料 (1. Feeds from Merchants)

    As you might be aware, there are several price comparison sites available on the internet. These sites get into a sort of understanding with the businesses wherein they get the data directly from them and which they use for price comparison.

    您可能已经知道,互联网上有几个价格比较站点。 这些站点与业务部门建立了某种了解,他们可以直接从他们那里获取数据并将其用于价格比较。

    These businesses put into place an API, or utilize FTP to provide the data. Generally, a referral commission is what makes a price comparison site financially viable.

    这些企业部署了API,或利用FTP提供数据。 通常,推荐佣金使价格比较站点在财务上可行。

    2.来自第三方API的产品Feed (2. Product feeds from third-party APIs)

    On the other hand, there are services which offer e-commerce data through an API. When such a service is used, the third party pays for the volume of data.

    另一方面,有些服务通过API提供电子商务数据。 使用此类服务​​时,第三方将为数据量付费。

    3.网页抓取 (3. Web Scraping)

    Web scraping is one of the most robust and reliable ways of getting web data from the internet. It is increasingly used in price intelligence because it is an efficient way of getting the product data from e-commerce sites.

    Web抓取是从Internet获取Web数据的最可靠,最可靠的方法之一。 由于它是从电子商务站点获取产品数据的有效方法,因此越来越多地用于价格情报中。

    You may not have access to the first and second option. Hence, web scraping can come to your rescue. You can use web scraping to leverage the power of data to arrive at competitive pricing for your business.

    您可能无权访问第一个和第二个选项。 因此,网页抓取可以助您一臂之力。 您可以使用网络抓取来利用数据的功能来为您的业务确定具有竞争力的价格。

    Web scraping can be used to get current prices for the current market scenario, and e-commerce more generally. We will use web scraping to get the data from an e-commerce site. In this blog, you will learn how to scrape the names and prices of products from Amazon in all categories, under a particular brand.

    Web抓取可用于获取当前市场情况下的当前价格,以及更广泛的电子商务。 我们将使用网络抓取来从电子商务网站获取数据。 在此博客中,您将学习如何从一个特定品牌的所有类别中刮取亚马逊产品的名称和价格。

    Extracting data from Amazon periodically can help you keep track of the market trends of pricing and enable you to set your prices accordingly.

    定期从Amazon提取数据可以帮助您跟踪定价的市场趋势,并使您能够相应地设置价格。

    目录 (Table of contents)

    1. Web scraping for price comparison

      网页抓取以进行价格比较

    2. Web scraping in R

      R中的网页抓取

    3. Implementation

      实作

    4. End note

      尾注

    1.网页抓取以进行价格比较 (1. Web scraping for price comparison)

    As the market wisdom says, price is everything. The customers make their purchase decisions based on price. They base their understanding of the quality of a product on price. In short, price is what drives the customers and, hence, the market.

    正如市场智慧所言,价格就是一切。 客户根据价格做出购买决定。 他们基于价格对产品质量的了解。 简而言之,价格是驱动客户以及市场的驱动力。

    Therefore, price comparison sites are in great demand. Customers can easily navigate the whole market by looking at the prices of the same product across the brands. These price comparison websites extract the price of the same product from different sites.

    因此, 价格比较网站的需求量很大。 客户可以通过查看各品牌相同产品的价格轻松浏览整个市场。 这些价格比较网站从不同的站点提取相同产品的价格。

    Along with price, price comparison websites also scrape data such as the product description, technical specifications, and features. They project the whole gamut of information on a single page in a comparative way.

    除价格外,价格比较网站还会抓取产品描述,技术规格和功能等数据。 他们以比较的方式在单个页面上投影全部信息。

    This answers the question the prospective buyer has asked in their search. Now the prospective buyer can compare the products and their prices, along with information such as features, payment, and shipping options, so that they can identify the best possible deal available.

    这回答了潜在买家在搜索中提出的问题。 现在,潜在买家可以比较产品及其价格,以及功能,付款和运输选项等信息,以便他们确定可用的最佳交易。

    Pricing optimization has its impact on the business in the sense that such techniques can enhance profit margins by 10%.

    从某种意义上说,此类技术可以将利润率提高10%,因此定价优化会对业务产生影响。

    E-commerce is all about competitive pricing, and it has spread to other business domains as well. Take the case of travel. Now even travel-related websites scrape the price from airline websites in real time to provide the price comparison of different airlines.

    电子商务全都具有竞争力的价格,并且它已经扩展到其他业务领域。 以旅行为例。 现在,甚至与旅行相关的网站也可以实时从航空公司网站上抓取价格,以提供不同航空公司的价格比较。

    The only challenge in this is to update the data in real time and stay up to date every second as prices keep changing on the source sites. Price comparison sites use Cron jobs or at the view time to update the price. However, it will rest upon the configuration of the site owner.

    唯一的挑战是实时更新数据并每秒更新一次,因为源站点上的价格不断变化。 价格比较网站使用Cron作业或在查看时间更新价格。 但是,它将取决于站点所有者的配置。

    This is where this blog can help you — you will be able to work out a scraping script that you can customize to suit your needs. You will be able to extract product feeds, images, price, and all other relevant details regarding a product from a number of different websites. With this, you can create your powerful database for price comparison site.

    这是此博客可以为您提供帮助的地方-您将能够制定出可以自定义以满足需要的抓取脚本。 您将能够从许多不同的网站中提取有关产品的产品Feed,图像,价格和所有其他相关详细信息。 这样,您就可以创建功能强大的价格比较网站数据库。

    2. R中的网页抓取 (2. Web scraping in R)

    Price comparison becomes cumbersome because getting web data is not that easy — there are technologies like HTML, XML, and JSON to distribute the content.

    价格比较变得麻烦,因为获取Web数据并不那么容易-存在诸如HTML,XML和JSON之类的技术来分发内容。

    So, in order to get the data you need, you must effectively navigate through these different technologies. R can help you access data stored in these technologies. However, it requires a bit of in-depth understanding of R before you get started.

    因此,为了获得所需的数据,您必须有效地浏览这些不同的技术。 R可以帮助您访问存储在这些技术中的数据。 但是,在开始之前,它需要对R有一点深入的了解。

    什么是R? (What is R?)

    Web scraping is an advanced task that not many people perform. Web scraping with R is, certainly, technical and advanced programming. An adequate understanding of R is essential for web scraping in this way.

    Web抓取是一项很少有人执行的高级任务。 用R进行Web抓取无疑是技术和高级编程。 对R的充分理解对于以这种方式刮取卷材至关重要。

    To start with, R is a language for statistical computing and graphics. Statisticians and data miners use R a lot due to its evolving statistical software, and its focus on data analysis.

    首先,R是用于统计计算和图形的语言。 由于R不断发展的统计软件以及对数据分析的关注,统计学家和数据挖掘者经常使用R。

    One reason R is such a favorite among this set of people is the quality of plots which can be worked out, including mathematical symbols and formulae wherever required.

    R之所以受到这组人的青睐的一个原因是可以得出的绘图质量,包括所需的数学符号和公式。

    R is wonderful because it offers a vast variety of functions and packages that can handle data mining tasks.

    R之所以出色,是因为R提供了许多可以处理数据挖掘任务的功能和包。

    rvest, RCrawler etc are R packages used for data collection processes.

    rvest,RCrawler等是用于数据收集过程的R包。

    In this segment, we will see what kinds of tools are required to work with R to carry out web scraping. We will see it through the use case of Amazon website from where we will try to get the product data and store it in JSON form.

    在此部分中,我们将了解与R配合使用需要哪些工具才能进行Web抓取。 我们将通过Amazon网站的用例来查看它,从那里我们将尝试获取产品数据并将其以JSON形式存储。

    要求 (Requirements)

    In this use case, knowledge of R is essential and I am assuming that you have a basic understanding of R. You should be aware of at least any one R interface, such as RStudio. The base R installation interface is fine.

    在这个用例中,R的知识是必不可少的,我假设您对R有了基本的了解 。 您应该知道至少任何一个R接口,例如RStudio。 基本的R安装界面很好。

    If you are not aware of R and the other associated interfaces, you should go through this tutorial.

    如果您不了解R和其他关联的接口,则应阅读教程。

    Now let’s understand how the packages we’re going to use will be installed.

    现在,让我们了解如何安装将要使用的软件包。

    包装方式: (Packages:)

    1. rvest

    1.

    Hadley Wickham authored the rvest package for web scraping in R. rvest is useful in extracting the information you need from web pages.

    Hadley Wickham在R中编写了用于网络抓取的rvest软件包。rvest在从网页提取所需信息方面很有用。

    Along with this, you also need to install the selectr and ‘xml2’ packages.

    与此同时,您还需要安装选择和“ xml2”软件包。

    Installation steps:

    安装步骤:

    install.packages(‘selectr’)
    install.packages(‘xml2’)
    install.packages(‘rvest’)

    rvest contains the basic web scraping functions, which are quite effective. Using the following functions, we will try to extract the data from web sites.

    rvest包含基本的Web抓取功能,这些功能非常有效。 使用以下功能,我们将尝试从网站中提取数据。

    • read_html(url) : scrape HTML content from a given URL

      read_html(url) :从给定的URL抓取HTML内容

    • html_nodes(): identifies HTML wrappers.

      html_nodes() :标识HTML包装器。

    • html_nodes(“.class”): calls node based on CSS class

      html_nodes(“.class”) :基于CSS类调用节点

    • html_nodes(“#id”): calls node based on <div> id

      html_nodes(“#id”) :基于<div> id调用节点

    • html_nodes(xpath=”xpath”): calls node based on xpath (we’ll cover this later)

      html_nodes(xpath=”xpath”) :基于xpath调用节点(我们将在后面介绍)

    • html_attrs(): identifies attributes (useful for debugging)

      html_attrs() :标识属性(用于调试)

    • html_table(): turns HTML tables into data frames

      html_table() :将HTML表转换为数据框

    • html_text(): strips the HTML tags and extracts only the text

      html_text() :剥离HTML标记,仅提取文本

    2. stringr

    2. 纵梁

    stringr comes into play when you think of tasks related to data cleaning and preparation.

    当您想到与数据清理和准备有关的任务时,便会发挥作用。

    There are four essential sets of functions in stringr:

    Stringr中有四组基本功能:

    • stringr functions are useful because they enable you to work around the individual characters within the strings in character vectors

      字符串函数非常有用,因为它们使您能够处理字符向量中字符串内的各个字符
    • there are whitespace tools which can be used to add, remove, and manipulate whitespace

      有空白工具可用于添加,删除和操作空白
    • there are locale sensitive operations whose operations will differ from locale to locale

      存在对语言环境敏感的操作,其操作因语言环境而异
    • there are pattern matching functions. These functions recognize four parts of pattern description. Regular expressions are the standard one but there are other tools as well

      有模式匹配功能。 这些功能识别模式描述的四个部分。 正则表达式是标准表达式,但还有其他工具

    Installation

    安装

    install.packages(‘stringr’)

    install.packages('stringr')

    3. jsonlite

    3. jsonlite

    What makes the jsonline package useful is that it is a JSON parser/generator which is optimized for the web.

    使jsonline包有用的原因在于,它是针对Web优化的JSON解析器/生成器。

    It is vital because it enables an effective mapping between JSON data and the crucial R data types. Using this, we are able to convert between R objects and JSON without loss of type or information, and without the need for any manual data wrangling.

    这一点至关重要,因为它可以在JSON数据和关键R数据类型之间进行有效的映射。 使用此方法,我们可以在R对象和JSON之间进行转换,而不会丢失类型或信息,也不需要任何手动数据处理。

    This works really well for interacting with web APIs, or if you want to create ways through which data can travel in and out of R using JSON.

    这对于与Web API交互非常有效,或者如果您想创建使用JSON将数据传入和传出R的方式,则非常有用。

    安装 (Installation)

    install.packages(‘jsonlite’)

    install.packages('jsonlite')

    Before we jump-start into it, let’s see how it works:

    在开始学习之前,让我们看看它是如何工作的:

    It should be clear at the outset that each website is different, because the coding that goes into a website is different.

    从一开始就应该清楚每个网站都是不同的,因为进入网站的编码是不同的。

    Web scraping is the technique of identifying and using these patterns of coding to extract the data you need. Your browser makes the website available to you from HTML. Web scraping is simply about parsing the HTML made available to you from your browser.

    Web抓取是一种识别并使用这些编码模式来提取所需数据的技术。 您的浏览器使您可以通过HTML访问该网站。 Web抓取只是关于解析从浏览器提供给您HTML。

    Web scraping has a set process that works like this, generally:

    Web抓取具有如下设置的过程,通常是这样的:

    • Access a page from R

      从R访问页面
    • Instruct R where to “look” on the page

      指示R在页面上“查找”的位置
    • Convert data in a usable format within R using the rvest package

      使用rvest包在R中以可用格式转换数据

    Now let’s go to implementation to understand it better.

    现在让我们去实施以更好地理解它。

    3.实施 (3. Implementation)

    Let’s implement it and see how it works. We will scrape the Amazon website for the price comparison of a product called “One Plus 6”, a mobile phone.

    让我们实现它,看看它是如何工作的。 我们将刮掉亚马逊网站,以比较一款名为“ One Plus 6”的手机的价格。

    You can see it here.

    你可以在这里看到它。

    步骤1:加载所需的软件包 (Step 1: Loading the packages we need)

    We need to be in the console, at R command prompt to start the process. Once we are there, we need to load the packages required as shown below:

    我们需要在控制台中的R命令提示符下启动该过程。 到达那里后,我们需要加载所需的软件包,如下所示:

    #loading the package:> library(xml2)> library(rvest)> library(stringr)

    步骤2:从Amazon读取HTML内容 (Step 2: Reading the HTML content from Amazon)

    #Specifying the url for desired website to be scrappedurl <- ‘https://www.amazon.in/OnePlus-Mirror-Black-64GB-Memory/dp/B0756Z43QS?tag=googinhydr18418-21&tag=googinkenshoo-21&ascsubtag=aee9a916-6acd-4409-92ca-3bdbeb549f80’
    #Reading the html content from Amazonwebpage <- read_html(url)

    In this code, we read the HTML content from the given URL, and assign that HTML into the webpage variable.

    在这段代码中,我们从给定的URL中读取HTML内容,并将该HTML分配给webpage变量。

    步骤3:从Amazon抓取产品详细信息 (Step 3: Scrape product details from Amazon)

    Now, as the next step, we will extract the following information from the website:

    现在,作为下一步,我们将从网站上提取以下信息:

    Title: The title of the product.Price: The price of the product.Description: The description of the product.Rating: The user rating of the product.Size: The size of the product.Color: The color of the product.

    标题:产品的标题。 价格:产品的价格。 描述:产品的描述。 等级:产品的用户等级。 尺寸:产品的尺寸。 颜色:产品的颜色。

    This screenshot shows how these fields are arranged.

    此屏幕快照显示了这些字段的排列方式。

    Next, we will make use of HTML tags, like the title of the product and price, for extracting data using Inspect Element.

    接下来,我们将使用HTML标记(例如产品标题和价格)来使用Inspect Element提取数据。

    In order to find out the class of the HTML tag, use the following steps:

    为了找出HTML标记的类,请使用以下步骤:

    => go to chrome browser => go to this URL => right click => inspect element

    =>转到chrome浏览器=> 转到该URL =>右键单击=>检查元素

    NOTE: If you are not using the Chrome browser, check out this article.

    注意:如果您没有使用Chrome浏览器,请参阅本文

    Based on CSS selectors such as class and id, we will scrape the data from the HTML. To find the CSS class for the product title, we need to right-click on title and select “Inspect” or “Inspect Element”.

    基于类和id之类CSS选择器,我们将从HTML中抓取数据。 要找到产品标题CSS类,我们需要右键单击标题,然后选择“检查”或“检查元素”。

    As you can see below, I extracted the title of the product with the help of html_nodes in which I passed the id of the title — h1#title — and webpage which had stored HTML content.

    如您在下面看到的,我在html_nodes的帮助下提取了产品的标题,在其中传递了标题的ID( h1#title )和存储HTML内容的webpage

    I could also get the title text using html_text and print the text of the title with the help of the head () function.

    我还可以使用html_text获取标题文本,并在head ()函数的帮助下打印标题文本。

    #scrape title of the product> title_html <- html_nodes(webpage, ‘h1#title’)> title <- html_text(title_html)> head(title)

    The output is shown below:

    输出如下所示:

    We could get the title of the product using spaces and \n.

    我们可以使用空格和\ n获得产品的标题。

    The next step would be to remove spaces and new line with the help of the str_replace_all() function in the stringr library.

    下一步是借助stringr库中的str_replace_all()函数删除空格和换行符。

    # remove all space and new linesstr_replace_all(title, “[\r\n]” , “”)

    Output:

    输出:

    Now we will need to extract the other related information of the product following the same process.

    现在,我们将需要按照相同的过程提取产品的其他相关信息。

    Price of the product:

    产品价格:

    # scrape the price of the product> price_html <- html_nodes(webpage, ‘span#priceblock_ourprice’)> price <- html_text(price_html)
    # remove spaces and new line> str_replace_all(title, “[\r\n]” , “”)
    # print price value> head(price)

    Output:

    输出:

    Product description:

    产品描述:

    # scrape product description> desc_html <- html_nodes(webpage, ‘div#productDescription’)> desc <- html_text(desc_html)
    # replace new lines and spaces> desc <- str_replace_all(desc, “[\r\n\t]” , “”)> desc <- str_trim(desc)> head(desc)

    Output:

    输出:

    Rating of the product:

    产品等级:

    # scrape product rating > rate_html <- html_nodes(webpage, ‘span#acrPopover’)> rate <- html_text(rate_html)
    # remove spaces and newlines and tabs > rate <- str_replace_all(rate, “[\r\n]” , “”)> rate <- str_trim(rate)
    # print rating of the product> head(rate)

    Output:

    输出

    Size of the product:

    产品尺寸:

    # Scrape size of the product> size_html <- html_nodes(webpage, ‘div#variation_size_name’)> size_html <- html_nodes(size_html, ‘span.selection’)> size <- html_text(size_html)
    # remove tab from text> size <- str_trim(size)
    # Print product size> head(size)

    Output:

    输出:

    Color of the product:

    产品颜色:

    # Scrape product color> color_html <- html_nodes(webpage, ‘div#variation_color_name’)> color_html <- html_nodes(color_html, ‘span.selection’)> color <- html_text(color_html)
    # remove tabs from text> color <- str_trim(color)
    # print product color> head(color)

    Output:

    输出:

    步骤4:我们已成功从所有字段中提取了数据,这些数据可用于比较另一个站点的产品信息。 (Step 4: We have successfully extracted data from all the fields which can be used to compare the product information from another site.)

    Let’s compile and combine them to work out a dataframe and inspect its structure.

    让我们对其进行编译和组合,以得出一个数据框并检查其结构。

    #Combining all the lists to form a data frameproduct_data <- data.frame(Title = title, Price = price,Description = desc, Rating = rate, Size = size, Color = color)
    #Structure of the data framestr(product_data)

    Output:

    输出:

    In this output we can see all the scraped data in the data frames.

    在此输出中,我们可以看到数据框中的所有已抓取数据。

    步骤5:以JSON格式存储数据: (Step 5: Store data in JSON format:)

    As the data is collected, we can carry out different tasks on it such as compare, analyze, and arrive at business insights about it. Based on this data, we can think of training machine learning models over this.

    收集数据后,我们可以对其执行不同的任务,例如比较,分析并获得有关它的业务见解。 基于这些数据,我们可以考虑在此基础上训练机器学习模型。

    Data would be stored in JSON format for further process.

    数据将以JSON格式存储以进行进一步处理。

    Follow the given code and get the JSON result.

    按照给定的代码获取JSON结果。

    # Include ‘jsonlite’ library to convert in JSON form.> library(jsonlite)
    # convert dataframe into JSON format> json_data <- toJSON(product_data)
    # print output> cat(json_data)

    In the code above, I have included jsonlite library for using the toJSON() function to convert the dataframe object into JSON form.

    在上面的代码中,我包括用于使用toJSON()函数将dataframe对象转换为JSON形式的jsonlite库。

    At the end of the process, we have stored data in JSON format and printed it.It is possible to store data in a csv file also or in the database for further processing, if we wish.

    在流程结束时,我们已经将数据存储为JSON格式并进行了打印。如果愿意,也可以将数据存储在csv文件中或数据库中以进行进一步处理。

    Output:

    输出:

    Following this practical example, you can also extract the relevant data for the same from product from https://www.oneplus.in/6 and compare with Amazon to work out the fair value of the product. In the same way, you can use the data to compare it with other websites.

    按照该实际示例,您还可以从https://www.oneplus.in/6中从产品中提取相同的相关数据,并与Amazon进行比较以得出产品的公允价值。 同样,您可以使用数据将其与其他网站进行比较。

    4.尾注 (4. End note)

    As you can see, R can give you great leverage in scraping data from different websites. With this practical illustration of how R can be used, you can now explore it on your own and extract product data from Amazon or any other e-commerce website.

    如您所见,R可以极大地帮助您从不同的网站抓取数据。 通过此实用的R用法示例,您现在可以自己浏览R并从Amazon或任何其他电子商务网站提取产品数据。

    A word of caution for you: certain websites have anti-scraping policies. If you overdo it, you will be blocked and you will begin to see captchas instead of product details. Of course, you can also learn to work your way around the captchas using different services available. However, you do need to understand the legality of scraping data and whatever you are doing with the scraped data.

    请注意: 某些网站具有反抓取政策 。 如果您做得过多,您将被屏蔽,您将开始看到验证码,而不是产品详细信息。 当然,您还可以使用各种可用的服务来学习如何处理验证码。 但是,您确实需要了解抓取数据的合法性以及对抓取数据所做的任何操作。

    Feel free to send to me your feedback and suggestions regarding this post!

    随时将您对本帖子的反馈和建议发送给我!

    翻译自: https://www.freecodecamp.org/news/an-introduction-to-web-scraping-using-r-40284110c848/

    r语言抓取网页数据

    展开全文
  • 使用Excel功能抓取网页表格数据

    万次阅读 2020-10-21 18:22:40
    本文主要介绍使用Excel来抓取网页的上面的数据。 示例链接:https://ranking.promisingedu.com/world-times 这上面这个表格之中,如果我采用复制,网页的表格然后粘贴在了Excel由于数据量过大,显的十分麻烦,...
  • R网页抓取数据

    千次阅读 2018-06-09 12:24:14
    R网页抓取数据web上有大量可用的数据。其中一些是以格式化的、可下载的data-sets的形式,易于访问。但大多数在线数据都是作为网络内容存在的,如博客、新闻故事和烹饪菜谱。使用格式化的文件,访问数据相当简单;只...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,748
精华内容 32,299
关键字:

从网页抓取数据的一般方法