我和我的导师正在写一篇关于罗德岛州室内性工作暂时合法化的影响的研究论文。作为我们数据收集的一部分,我们试图从theeroticreview.com网站上获取性工作者特征、平均价格和其他一些数据。有太多的配置文件要手工输入,所以我试图写一个R脚本来自动化这个过程。
目前,我的代码看起来像这样:如您所见,我必须分别输入每个配置文件的每个名称,否则我会得到一个"没有链接有文字"错误。有2000个观察结果。xpath不能很好地显示格式。
##Set Main Page
TER <- html_session("https://www.theeroticreview.com/reviews/newreviewsList.asp?searchreview=1&gCity=region1%2Dus%2Drhode%2Disland&gCityName=Rhode+Island+%28State%29&SortBy=3&gDistance=0")
##Locate and follow link to profile
reviews <- TER %>% follow_link('Ashley')
## extract required information
reviews %>% html_nodes('h1') %>% html_text()
##back to main page
rhea <- reviews %>% back()
revieww <- TER %>% follow_link("Lily")
revieww %>% html_nodes('h1') %>% html_text()
rhea <- revieww %>% back()
reviewa <- TER %>% follow_link("Coco")
reviewa %>% html_nodes('h1') %>% html_text()
rhea <- reviewa %>% back()
##Move to Next Page
TER %>% jump_to('https://www.theeroticreview.com/reviews/newreviewsList.asp?Valid=1&mp=0&SortBy=3&searchreview=1&gCity=region1-us-rhode-island&gDistance=0&gCityName=Rhode%20Island%20(State)&page=2')
TER2 <- html_session('https://www.theeroticreview.com/reviews/newreviewsList.asp?Valid=1&mp=0&SortBy=3&searchreview=1&gCity=region1-us-rhode-island&gDistance=0&gCityName=Rhode%20Island%20(State)&page=2')
reviewd <- TER2 %>% follow_link('Danielle')
reviewd %>% html_nodes('h1') %>% html_text()
在网站的HTML中,每个链接都是td-name。有没有办法写一个算法/代码功能,使这个过程是自动化的?
首先,确保你在抓取这些数据时没有违反网站的服务条款,特别是如果你打算基于这些数据发表研究。
我不认为你需要一个无头浏览器来获得你需要的东西,如果你可以避免使用一个,你应该。下面是一段代码,它将为您提供与每个配置文件相关联的链接。
profile_url_lst <- list()
for(page_num in 1:73){
main_url <- paste0("https://www.theeroticreview.com/reviews/newreviewsList.asp?searchreview=1&gCity=region1%2Dus%2Drhode%2Disland&gCityName=Rhode+Island+%28State%29&SortBy=3&gDistance=0&page=", page_num)
html_content <- read_html(main_url)
profile_urls <- html_content %>% html_nodes("body") %>% html_children() %>% html_children() %>% .[2] %>% html_children() %>%
html_children() %>% .[3] %>% html_children() %>% .[4] %>% html_children() %>% html_children() %>% html_children() %>%
html_attr("href")
profile_url_lst[[page_num]] <- profile_urls
}
这工作了几个页面。我还没有运行整个循环。您可能还希望在循环的末尾包含Sys.sleep(2)
,以免使服务器不堪重负。我想更深入地研究一下这个网站,但我的电脑挨着窗户,我不想给邻居留下错误的印象。