Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
抓取javascript网站_Javascript_Xml_R_Web Scraping_Screen Scraping - Fatal编程技术网

抓取javascript网站

抓取javascript网站,javascript,xml,r,web-scraping,screen-scraping,Javascript,Xml,R,Web Scraping,Screen Scraping,我能够从基本的html页面上刮取数据,但是我在从下面的网站上刮取数据时遇到了麻烦。看起来数据是通过javascript呈现的,我不确定如何解决这个问题。如果可能的话,我更喜欢使用R来进行刮取,但也可以使用Python 有什么想法/建议吗 编辑:我需要抓取每件物品的年份/制造商/型号、序列号、价格、位置和简短描述(以“拍卖:”开头) 库(XML) 图书馆(relium) ##下载网站 网站使用relium: require(relenium) # More info: https://github

我能够从基本的html页面上刮取数据,但是我在从下面的网站上刮取数据时遇到了麻烦。看起来数据是通过javascript呈现的,我不确定如何解决这个问题。如果可能的话,我更喜欢使用R来进行刮取,但也可以使用Python

有什么想法/建议吗

编辑:我需要抓取每件物品的年份/制造商/型号、序列号、价格、位置和简短描述(以“拍卖:”开头)

库(XML)
图书馆(relium)
##下载网站

网站使用
relium

require(relenium) # More info: https://github.com/LluisRamon/relenium
require(XML)
firefox <- firefoxClass$new() # init browser
res <- NULL
pages <- 1:2
for (page in pages) {
  url <- sprintf("http://www.machinerytrader.com/list/list.aspx?pg=%d&bcatid=4&DidSearch=1&EID=1&LP=MAT&ETID=5&catid=1015&mdlx=Contains&Cond=All&SO=26&btnSearch=Search&units=imperial", page)
  firefox$get(url) 
  doc <- htmlParse(firefox$getPageSource())
  res <- rbind(res, 
               cbind(year_manu_model = xpathSApply(doc, '//table[substring(@id, string-length(@id)-15) = "tblListingHeader"]/tbody/tr/td[1]', xmlValue),
                     sn = xpathSApply(doc, '//table[substring(@id, string-length(@id)-15) = "tblListingHeader"]/tbody/tr/td[2]', xmlValue),
                     price = xpathSApply(doc, '//table[substring(@id, string-length(@id)-15) = "tblListingHeader"]/tbody/tr/td[3]', xmlValue),
                     loc = xpathSApply(doc, '//table[substring(@id, string-length(@id)-15) = "tblListingHeader"]/tbody/tr/td[4]', xmlValue),
                     auc = xpathSApply(doc, '//table[substring(@id, string-length(@id)-9) = "tblContent"]/tbody/tr/td[2]', xmlValue))
  )
}
sapply(as.data.frame(res), substr, 0, 30)                        
#      year_manu_model                  sn               price         loc   auc                               
# [1,] " 1972 AMERICAN 5530"            "GS14745W"       "US $50,100"  "MI " "\n\t\t\t\t\tAuction: 1/9/2013; 4,796" 
# [2,] " AUSTIN-WESTERN 307"            "307"            "US $3,400"   "MT " "\n\t\t\t\t\tDetails & Photo(s)Video(" 
# ...
require(relium)#更多信息:https://github.com/LluisRamon/relenium
需要(XML)

firefox关注Selenium。这里有一些通过R使用它的例子,但不多。使用,它让你连接到页面,等待元素被加载。您还可以将JavaScript直接注入页面上下文。感谢您的快速响应。然而,当我运行这段代码时,我会得到空结果。readHTMLTable命令似乎实际上没有读取任何内容。它只生成一个空列表。有什么想法吗?还有,如果有区别的话,我正在使用Windows7。谢谢你指出,你是对的,我确实使用了不同的设置,允许直接下载。我更新了答案,首先用
relium
下载源代码,然后使用
readHTMLTable
,现在应该可以了!安装了Relium,但当我运行上面的代码时,我得到了“Error:WebDriverException”。知道是什么原因导致了这种情况吗?@lukeA-错误已经消失,但“auc”字段有两个问题:1)它没有拉取全文,2)出于某种原因它交替拉取“细节和照片”文本(例如:第一条记录拉取拍卖数据,第二条记录拉取细节和照片,第三条记录拉取拍卖数据…)。有什么想法吗?解决了第一个问题-只需将sapply参数从30设置为300。还看到“auc”字段出于某种原因被拉入\n\t\t\t\t。@user3384596
sapply
将存储在
res
中的输出缩短了一点。您应该能够使用例如
stringr::str_trim()
tm::stripWhitespace()
或仅使用
gsub
轻松去除尾部控制字符。另一个问题是:调整xpath以满足您的需要。