【问题标题】:How to scrape data from this website?如何从这个网站上抓取数据?
【发布时间】:2017-07-28 15:14:19
【问题描述】:

我需要登录此站点http://bit.do 进行抓取。数据受密码保护,但我不知道如何在 R 中登录访问它们。

我试过了

 library (rvest)

 url       <-"http://bit.d o/#login/admin"   
 pgsession <-html_session(url)               
 pgform    <-html_form(pgsession)[[1]]       


 filled_form <- set_values(pgform,
 'username' = "test0001", 
 'password' = "qwerty1234")

 submit_form(pgsession,filled_form)

 url <- 'http://bit.d o/admin/url/http%3A||2F||2Fedition.cnn.com||2F2017||2F07||2F21||2Fopinions||2Ftrump-russia-putin-lain-opinion||2Findex.html'
 data_page <- read_html(url)
 data_link<- html_nodes(data_page,'td > a')
 data_click<- html_nodes(data_page,'td span:nth-child(1)')

但我得到了这种错误

 Submitting with 'NULL'
 Error in xml2::url_absolute(form$url, session$url) : 
 Not compatible with STRSXP: [type=NULL].

我该怎么办?这些是我的测试凭证用户名:test0001,密码:qwerty1234。这是我要抓取的受保护数据示例http://bit.do/admin/url/http%3A||2F||2Fedition.cnn.com||2F2017||2F07||2F21||2Fopinions||2Ftrump-russia- putin-lain-opinion||2Findex.html

重要提示:由于 StackOverflow 限制,我在域名中的 d 和 o 之间放置了一个空格

【问题讨论】:

    标签: r login web-scraping


    【解决方案1】:

    由于表单没有url 字段,因此当您调用submit_form(pgsession, filled_form) 时,调用xml2::url_absolute(form$url, session$url) 不起作用,因为form$urlNULL。为了解决这个问题,您需要为url_absolute 调用的form$url 提供一个值(即使它是空的)。在使用set_values 填充filled_form 后尝试添加以下行:

    filled_form$url <- ''
    

    【讨论】:

    • 感谢您的回答@Oriol。我尝试了filled_form &lt;- set_values(pgform, 'username' = "test0001", 'password' = "qwerty1234") filled_form$url &lt;- ' ' submit_form(pgsession,filled_form) 并得到了&lt;session&gt; http://bit.do/?username=test0001&amp;password=qwerty1234&amp;NULL=Login Status: 200 Type: text/html; charset=UTF-8 Size: 34650 不幸的是它不起作用:(
    • 嗯...我很困惑。你得到一个登录状态为 200。那是不是意味着你登录成功了?有什么问题?
    • 尽管状态为 200 登录不成功,并且抓取不返回任何数据。你自己看吧,我上面写了我的测试凭证
    • 对。我只是想让你通过错误消息。如果您查看表单的代码,您会看到:onSubmit="chklogin(); return(false);"。这意味着表单永远不会正常发送(这就是return(false) 所做的事情。相反,它调用了javascript函数chklogin()。据我所知,你不能从rvest 触发它,所以你需要使用 Selenium 服务器和 RSelenium。如果您愿意这样做并且可以等待几天,我很乐意发布更详细的答案。或者您可以专门为此提出不同的问题。让我知道.
    • 我当然可以等待,我已经尝试解决这个问题一个多星期了,结果很糟糕(太令人沮丧了!!!)。提前感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2013-05-21
    相关资源
    最近更新 更多