ywh19860616

  •  
  • 2020年1月9日
  • 注册于 2009年12月23日
  • (各位老师,好,之前在网上看到一篇您写的用R软件爬虫的推文[https://mp.weixin.qq.com/s?__biz=MzI5NDY1MjQzNA==&mid=2247488261&idx=1&sn=a6eb1aa7e3aa3ae7065ce76adc124673&chksm=ec5ecc78db29456e20b444756f074bdb8859efd7522a6523aa1b6c469d3ae44f81e9dea222cc&mpshare=1&scene=1&srcid=1220rTg6mM4V3gCmfhVzhLzc#rd],我想问问如何利用R软件实现。R利用的httr包里面也有)
    GET和POST函数,我仿造例子写了下代码:

    library(httr)
    #cookie <- 'AlteonP=A8KeEQnySd7Wkp8OMNsQTw$$;iplocation=%E5%8C%97%E4%BA%AC%E5%B8%82%7C0%7C0'
    cookie <- ' _u_=1; gr_user_id=40f8d796-9967-4f05-b8e9-5ad94b4fdbce; Hm_lvt_7226f1398a8a1aae74384b0f7635de6f=1545374993; AlteonP=A8KeEQnySd7Wkp8OMNsQTw$$; __RequestVerificationToken=HWDlXbsh0czOhNPjLp5-CBYhP4HOM_IJwBL0FJmEScxG60_bsLhoA8EQ6pQrxO-U_ql7ohw9Ti_LUQtHmYVm-Uh8rAmHo4BVjyOTKmgybXMjHXhkwfh8RxCE2TbaXC-LWzeLDUx2G6vFuk-iLDxElw2; gr_session_id_a58d28f5fdbbcb8b=566fb47d-7fac-46a0-b63c-899eb81d0acd; gr_session_id_a58d28f5fdbbcb8b_566fb47d-7fac-46a0-b63c-899eb81d0acd=true; Hm_lpvt_7226f1398a8a1aae74384b0f7635de6f=1545394443; iplocation=%E4%B8%8A%E6%B5%B7%E5%B8%82%7C0%7C0'
    headers <- c('Accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
                 'Content-Type'='text/html; charset=utf-8',          
                 'Referer'='http://www.pizzahut.com.cn/StoreList', 
                 'Host'= 'www.pizzahut.com.cn',
                 'User-Agent'='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',          
                 'Connection'='keep-alive',
                 'cookie'='cookie')
    payload<-list(
      pageIndex=1,
      pageSize=50
    )
    
    url <- "http://www.pizzahut.com.cn/StoreList"
    
    louwill1<-POST(url,add_headers(.headers =headers))
    louwill2<-POST(url,add_headers(.headers =headers),body = payload, encode="json")
    content(louwill2)

    上面命令没有下载到数据,请教各位。谢谢!

    • tctcab 您好!我发现在循环加了Sys.sleep(10)之后,还是会才存在这个问题。
      比如我下载完shanghai的后,下载jiangsu的,把地址修改为
      http://www.cbrc.gov.cn/zhuanti/xzcf/getPcjgXZCFDocListDividePage/jiangsu.html?current=

      然后接着用上面的程序
      `
      rm(list=ls())
      library(rvest)
      library(stringr)
      library(stringi)
      source("G:\\scrapweb.R")

      web1 = "http://www.cbrc.gov.cn/zhuanti/xzcf/getPcjgXZCFDocListDividePage/jiangsu.html?current="
      web2 = list()
      web3 = list()
      for (i in 1:19){
      web2[] = paste(web1,i,sep="")
      page = read_html(web2[],encoding="UTF-8")
      web3[] = page %>% html_nodes(".bookw3 a") %>% html_attr('href')
      Sys.sleep(10)
      }
      `
      提示错误:Error in open.connection(x, "rb") : HTTP error 403.
      ^IP又被禁止了。

    • 各位老师,好!我想从网站http://www.cbrc.gov.cn/zhuanti/xzcf/getPcjgXZCFDocListDividePage/shanghai.html?current=爬取数据,发现多次爬之后就会被认为非法攻击这个网页,然后电脑ip被限制,不能访问这个网站。有没有办法可以用伪装浏览器或代理IP什么的解决?。下面是我写的代码:

      `
      rm(list=ls())
      library(rvest)
      library(stringr)
      library(stringi)

      web1 = "http://www.cbrc.gov.cn/zhuanti/xzcf/getPcjgXZCFDocListDividePage/shanghai.html?current="
      web2 = list()
      web3 = list()
      for (i in 1:10){
      web2[] = paste(web1,i,sep="")
      page = read_html(web2[],encoding="UTF-8")
      web3[] = page %>% html_nodes(".bookw3 a") %>% html_attr('href')
      }
      `
      执行上面例子会提示:Error in open.connection(x, "rb") : HTTP error 403.然后这个网页就打不开了。
      在这个网站https://blog.csdn.net/tayangdang1058/article/details/81319094看到一个例子,

      library(xml2)
      library(httr)
      h2<-'http://www.dianping.com/search/keyword/325/0_%E9%85%92%E5%90%A7/p3'
      session = h2 %>% html_session(add_headers(
      User-Agent="Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1")) %>% html_nodes("h4")%>%html_text()

      不知道如何修改?请各位有经验的老师能否给点提示,谢谢!

    • 请教各位老师,我现在用quantreg包里面的nlrq函数跑模型,发现设置不同的初始值,结果可能出现截然不同,这个要如何处理?比如下面的例子,
      n <- 1000
      df <- 8
      delta <- 8
      x <- sort(rt(n, df))
      u <- runif(n)
      v <- -log(1 - (1 - exp(-delta))/(1 + exp(-delta pt(x, df)) ((1/u) - 1)))/delta
      y <- qt(v, df)
      Dat <- NULL
      Dat$x <- x
      Dat$y <- y
      deltas <- matrix(0, 3, length(us))

      FrankModel <- function(x, delta, mu, sigma, df,tau) {
      z <- qt(-log(1 - (1 - exp(-delta))/(1 + exp(-delta
      pt(x, df))
      ((1/tau) - 1)))/delta, df)
      mu + sigma * z
      }

      us <- c(0.25, 0.5, 0.75)
      for (i in 1:length(us)) {
      tau = us
      fit <- nlrq(y ~ FrankModel(x, delta, mu, sigma, df = 8, tau = tau), method = "SANN",data = Dat, tau = tau,start = list(delta = 5, mu = 0, sigma = 1),trace = TRUE)
      deltas[i, ] <- coef(fit)
      }

      改变dalta,mu和sigma的初始值,结果会变很大,有些系数会从正变为负。

    • 请教各位,在遇到回归系数为负数时,在knitr如何比较好的输出公式
      比如y = c + b1*x1 + error

      `{r}
      options(digits = 4)
      n <- 100
      x <- rnorm(n)
      y <- rnorm(n)
      fit = lm(y~x)
      coef(summary(fit))
      b = coef(fit)
      `
      上面回归方程中的斜率是r b[2],完整的回归方程为:$$ Y = r b[1] + r b[2]x$$

      如果b[2]值为负数,比如b[1]=0.5,b[2]=-0.2,那就出现这样的情况
      Y = 0.5 + -0.2x
      这个如何处理比较好?

    • 比如存在一个矩阵,我想计算每两列的比值
      myfunc <- function(x,y) {
        return(x[,y]/x[,y-1])
      }
      
      m1 = matrix(c(1,2,3,4,5,6,7,8,9),nrow=3)
      myfunc(m1,2)  ##第2列和第1列
      
      我想用apply实现,比如
      apply(m1,1,myfunc,y=2)
      
      但是提示错误,请各位老师请教!
      谢谢



    • [未知用户]
      我也想请教一下,如何利用ggplot2标注x^(1)=x^(2)=x^(3)这样的数学表达式形式?我
      看到的例子都是只有一个等于号的,即x^(1)=x^(2),这个如何解决?谢谢您
    • 请教各位老师,asbio中画出来的动画图能否保存在word中也能看到这个运行效果。
      例如,
      library('asbio')
      X <- c(11.2,10.8,9.0,12.4,12.1,10.3,10.4,10.6,9.3,11.8)
      loglik.norm.plot(X,dist="norm",parameter="mu")
      
    • [未知用户]
      非常感谢,我的原意就是从网页读取的,无奈水平有限,一直实现不了,才想到转换思路。
      我还想请教下,就上面的例子,怎么只读取出Q3,Q2等字符?

    • [未知用户]
      谢谢您。
      这个代码返回的是字符所在的位置,怎么返回具体的字符?
      我用下面的代码
      gregexpr('tmp_category_[0-9]+', res)
      res[gregexpr('tmp_category_[0-9]+', res)[[1]]]
      
      返回的是NA。问题出在哪?
    • 各位老师,我想请教下一个问题,
      比如有如下的txt文档,里面的内容:

      </div> <script type="text/javascript"> handle_async_data('tmp_CitationScoreCard', 'CitationScoreCard'); </script> <span id="tmp_category_3" style="display: none"> <table cellspacing="0" cellpadding="0" border="0" class="JCR_Category_table"> <tr> <th>JCR<span class="RegMark">®</span> 类别</th> <th>JCR 分区</th> </tr> <tr> <td> ECONOMICS </td> <td class="JCR_quartile">Q3</td> </tr> </table> <br/> <p class="overlayJCRtext" id="3_overlayJCRtext_PH"> 数据来自第 2013 版 Journal Citation Reports<span class="RegMark">®</span> </p> </span> <script type="text/javascript"> handle_async_data("tmp_category_3", "category_3"); </script> <script type="text/javascript"> $("#show_journal_overlay_link_3").show(); $("#source_title_3").hide(); </script> <script type="text/javascript"> if($( '#3_overlayJCRtext_PH' ).length != 0){ $('#3_overlayJCRtext_PH').html($('#3_tmp_overlayJCRtext').html()) } </script> <span id="tmp_category_2" style="display: none"> <table cellspacing="0" cellpadding="0" border="0" class="JCR_Category_table"> <tr> <th>JCR<span class="RegMark">®</span> 类别</th> <th>JCR 分区</th> </tr> <tr> <td> ECONOMICS </td> <td class="JCR_quartile">Q3</td> </tr> </table> <br/> <p class="overlayJCRtext" id="2_overlayJCRtext_PH"> 数据来自第 2013 版 Journal Citation Reports<span class="RegMark">®</span> </p> </span> <script type="text/javascript"> handle_async_data("tmp_category_2", "category_2"); </script> <script type="text/javascript"> $("#show_journal_overlay_link_2").show(); $("#source_title_2").hide(); </script> <script type="text/javascript"> if($( '#2_overlayJCRtext_PH' ).length != 0){ $('#2_overlayJCRtext_PH').html($('#2_tmp_overlayJCRtext').html()) } </script> <span id="tmp_category_1" style="display: none"> <table cellspacing="0" cellpadding="0" border="0" class="JCR_Category_table"> <tr> <th>JCR<span class="RegMark">®</span> 类别</th> <th>JCR 分区</th> </tr> <tr> <td> ECONOMICS </td> <td class="JCR_quartile">Q4</td> </tr> </table> <br/> <p class="overlayJCRtext" id="1_overlayJCRtext_PH"> 数据来自第 2013 版 Journal Citation Reports<span class="RegMark">®</span> </p> </span> <script type="text/javascript"> handle_async_data("tmp_category_1", "category_1"); </script> <script type="text/javascript"> $("#show_journal_overlay_link_1").show(); $("#source_title_1").hide(); </script> <script type="text/javascript"> if($( '#1_overlayJCRtext_PH' ).length != 0)

      我现在想从中找出包括tmp_category_的,如tmp_category_3,tmp_category_2,tmp_category_1,然后保存到一个变量中。

      我的想法是先读取到R中,
      res <- readLines("lookfor.txt")
      
      然后利用正则表达式,可是有一个问题,这样读取出来的res的长度为1,所以当做一个整体字符了。
      应该怎么解决这个问题?
      谢谢
    • <div class="d4p-bbp-quote-title">zggjtsgzczh wrote:</div>回复 3 楼ywh19860616

      看这里:http://www.r-bloggers.com/rvest-easy-web-scraping-with-r/
      它有一个demo。

      现在网页数据抓取的难度其实更多的是在怎样针对js这类数据的操作还有一些http底层的数据包的抓取操作。
      谢谢您。楼主的例子,
      score = html_text(web %>% html_nodes("span") %>% html_nodes("em"))

      这里的html_nodes("em")没有看到哪里得到的。
    • 谢谢前辈提供的信息,大致明白了,我再看看。
    • 太厉害了
      前辈,我想请教下您,
      score = html_text(web %>% html_nodes("span") %>% html_nodes("em"))

      year = web %>% html_nodes("p")

      html_nodes括号里面应该怎么填的?比如您这里span,em及p,能请您解释一下吗?
      谢谢您。