首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用readLines和R中的循环从多个网页中获取信息?

如何使用readLines和R中的循环从多个网页中获取信息?
EN

Stack Overflow用户
提问于 2020-02-09 20:53:09
回答 1查看 34关注 0票数 0

我正在尝试从公开的秘密网页上搜集关于2018年美国国会选举的数据。每个地区都有不同的URL。在单个URL上使用readLines可以精确地得到我想要的输出。这为我提供了亚利桑那州第一区的正确输出:

代码语言:javascript
运行
AI代码解释
复制
dollars <- readLines("https://www.opensecrets.org/races/summary?cycle=2018&id=AZ01&spec=N", encoding ='UTF-8')

然而,我想要得到所有435个地区的所有信息。我知道我可以手动创建一个URL矢量,但这似乎非常低效。相反,我希望遍历所有共享相同基址的URL。我正在尝试使用以下代码:

代码语言:javascript
运行
AI代码解释
复制
Parl_all <- list()
for (i in 1:435) {
df <- readLines(paste("https://www.opensecrets.org/races/summary?
  cycle=2018&id=",i,"&spec=N", sep=""), encoding = 'UTF-8')
df <- str_replace_all(df, "<img src='images/check.gif'>", "<font 
size='2'>Yes</font>")
df <- read_html(toString(df))
df <- as.data.frame(html_table(df, fill=TRUE))
df$district <- i
Parl_all[[i]] <- df
}

但它给出了以下错误:

代码语言:javascript
运行
AI代码解释
复制
``Error in `$<-.data.frame`(`*tmp*`, "session", value = 1L) : 

替换有1行,数据有0个

显然,数据没有被抓取。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-09 22:11:50

这是因为您只是将数字1到435粘贴到url的"id“字段中。你需要国会选区的简称,比如AZ01VA03等。下面是它们的矢量:

代码语言:javascript
运行
AI代码解释
复制
districts <- c("AL01", "AL02", "AL03", "AL04", "AL05", "AL06", "AL07", 
"AR01", "AR02", "AR03", "AR04", "AS98", "AZ01", "AZ02", "AZ03", 
"AZ04", "AZ05", "AZ06", "AZ07", "AZ08", "AZ09", "CA01", "CA02", 
"CA03", "CA04", "CA05", "CA06", "CA07", "CA08", "CA09", "CA10", 
"CA11", "CA12", "CA13", "CA14", "CA15", "CA16", "CA17", "CA18", 
"CA19", "CA20", "CA21", "CA22", "CA23", "CA24", "CA25", "CA26", 
"CA27", "CA28", "CA29", "CA30", "CA31", "CA32", "CA33", "CA34", 
"CA35", "CA36", "CA37", "CA38", "CA39", "CA40", "CA41", "CA42", 
"CA43", "CA44", "CA45", "CA46", "CA47", "CA48", "CA49", "CA50", 
"CA51", "CA52", "CA53", "CO01", "CO02", "CO03", "CO04", "CO05", 
"CO06", "CO07", "CT01", "CT02", "CT03", "CT04", "CT05", "CTZZ", 
"DC98", "DE00", "FL01", "FL02", "FL03", "FL04", "FL05", "FL06", 
"FL07", "FL08", "FL09", "FL10", "FL11", "FL12", "FL13", "FL14", 
"FL15", "FL16", "FL17", "FL18", "FL19", "FL20", "FL21", "FL22", 
"FL23", "FL24", "FL25", "FL26", "FL27", "GA01", "GA02", "GA03", 
"GA04", "GA05", "GA06", "GA07", "GA08", "GA09", "GA10", "GA11", 
"GA12", "GA13", "GA14", "GU98", "HI01", "HI02", "IA01", "IA02", 
"IA03", "IA04", "ID01", "ID02", "IL01", "IL02", "IL03", "IL04", 
"IL05", "IL06", "IL07", "IL08", "IL09", "IL10", "IL11", "IL12", 
"IL13", "IL14", "IL15", "IL16", "IL17", "IL18", "ILZZ", "IN01", 
"IN02", "IN03", "IN04", "IN05", "IN06", "IN07", "IN08", "IN09", 
"KS01", "KS02", "KS03", "KS04", "KY01", "KY02", "KY03", "KY04", 
"KY05", "KY06", "LA01", "LA02", "LA03", "LA04", "LA05", "LA06", 
"MA01", "MA02", "MA03", "MA04", "MA05", "MA06", "MA07", "MA08", 
"MA09", "MD01", "MD02", "MD03", "MD04", "MD05", "MD06", "MD07", 
"MD08", "ME01", "ME02", "MI01", "MI02", "MI03", "MI04", "MI05", 
"MI06", "MI07", "MI08", "MI09", "MI10", "MI11", "MI12", "MI13", 
"MI14", "MIZZ", "MN01", "MN02", "MN03", "MN04", "MN05", "MN06", 
"MN07", "MN08", "MO01", "MO02", "MO03", "MO04", "MO05", "MO06", 
"MO07", "MO08", "MS01", "MS02", "MS03", "MS04", "MT00", "NA98", 
"NC01", "NC02", "NC03", "NC04", "NC05", "NC06", "NC07", "NC08", 
"NC09", "NC10", "NC11", "NC12", "NC13", "ND00", "NE01", "NE02", 
"NE03", "NH01", "NH02", "NJ01", "NJ02", "NJ03", "NJ04", "NJ05", 
"NJ06", "NJ07", "NJ08", "NJ09", "NJ10", "NJ11", "NJ12", "NM01", 
"NM02", "NM03", "NV01", "NV02", "NV03", "NV04", "NY01", "NY02", 
"NY03", "NY04", "NY05", "NY06", "NY07", "NY08", "NY09", "NY10", 
"NY11", "NY12", "NY13", "NY14", "NY15", "NY16", "NY17", "NY18", 
"NY19", "NY20", "NY21", "NY22", "NY23", "NY24", "NY25", "NY26", 
"NY27", "OH01", "OH02", "OH03", "OH04", "OH05", "OH06", "OH07", 
"OH08", "OH09", "OH10", "OH11", "OH12", "OH13", "OH14", "OH15", 
"OH16", "OK01", "OK02", "OK03", "OK04", "OK05", "OR01", "OR02", 
"OR03", "OR04", "OR05", "PA01", "PA02", "PA03", "PA04", "PA05", 
"PA06", "PA07", "PA08", "PA09", "PA10", "PA11", "PA12", "PA13", 
"PA14", "PA15", "PA16", "PA17", "PA18", "PR98", "RI01", "RI02", 
"SC01", "SC02", "SC03", "SC04", "SC05", "SC06", "SC07", "SD00", 
"TN01", "TN02", "TN03", "TN04", "TN05", "TN06", "TN07", "TN08", 
"TN09", "TX01", "TX02", "TX03", "TX04", "TX05", "TX06", "TX07", 
"TX08", "TX09", "TX10", "TX11", "TX12", "TX13", "TX14", "TX15", 
"TX16", "TX17", "TX18", "TX19", "TX20", "TX21", "TX22", "TX23", 
"TX24", "TX25", "TX26", "TX27", "TX28", "TX29", "TX30", "TX31", 
"TX32", "TX33", "TX34", "TX35", "TX36", "UT01", "UT02", "UT03", 
"UT04", "VA01", "VA02", "VA03", "VA04", "VA05", "VA06", "VA07", 
"VA08", "VA09", "VA10", "VA11", "VI98", "VT00", "WA01", "WA02", 
"WA03", "WA04", "WA05", "WA06", "WA07", "WA08", "WA09", "WA10", 
"WI01", "WI02", "WI03", "WI04", "WI05", "WI06", "WI07", "WI08", 
"WV01", "WV02", "WV03", "WY00")

以下是使用此向量中的前几个元素的完整工作示例:

代码语言:javascript
运行
AI代码解释
复制
library(stringr)
library(rvest)

districts <- c("AL01", "AL02", "AL03", "AL04", "AL05", "AL06", "AL07", 
               "AR01", "AR02", "AR03", "AR04", "AS98", "AZ01", "AZ02", "AZ03")

get_table <- function(district) 
{
  "https://www.opensecrets.org/races/summary"                                  %>%
  paste0("?cycle=2018&id=", district, "&spec=N")                               %>%
  readLines()                                                                  %>%
  str_replace_all("<img src='images/check.gif'>", "<font size='2'>Yes</font>") %>%
  toString()                                                                   %>%
  read_html()                                                                  %>%
  html_table(fill = TRUE)                                                      %>%
  as.data.frame()
}

Parl_all        <- lapply(districts, get_table)
names(Parl_all) <- districts

现在您有一个名为每个国会选区的列表,因此您可以执行以下操作

代码语言:javascript
运行
AI代码解释
复制
Parl_all$AL01
#>                                                                                                        Candidate
#> 1 ,                           Bradley Byrne (R),  • Incumbent • Winner                          (63.2% of vote),
#> 2                 ,                           Robert Kennedy Jr. (D),                           (36.8% of vote),
#>       Raised    Spent Cash.on.Hand Last.Report
#> 1 $1,460,041 $831,634   $1,074,725  12/31/2018
#> 2    $46,845  $46,845           $0  12/31/2018
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60141208

复制
相关文章
flutter - 如何在 ListView 构建器中显示特定索引中的项目 原文 标签 flutter dart
我想开始显示索引5中的列表项 ListView.builder( itemCount: items.length, itemBuilder: (context, index) { return ListTile( title: Text('${items[index]}'), ); }, ); 最佳答案 看一下这个 ListView.builder( itemCount: items.length, itemBuilder: (context, index) { if(index < 5
徐建国
2021/08/30
6.7K0
如何在AI Studio数据可视化图像中显示汉字
AI Studio是一个非常好用的数据科学在线实验平台,不论是教学、学习还是开发,都可以使用。但是,下面的缺憾未免成为了珍珠上的一点瑕疵。
老齐
2020/05/15
3.5K0
如何在AI Studio数据可视化图像中显示汉字
图像相似度比较和检测图像中的特定物
对普通人而言,识别任意两张图片是否相似是件很容易的事儿。但是从计算机的角度来识别的话,需要先识别出图像的特征,然后才能进行比对。在图像识别中,颜色特征是最为常见的。每张图像都可以转化成颜色分布直方图,如果两张图片的直方图很接近,就可以认为它们很相似。这有点类似于判断文本的相似程度。
fengzhizi715
2018/08/24
2.9K0
图像相似度比较和检测图像中的特定物
如何在VimVi中显示行号
Vim/Vi是许多软件开发人员和Linux系统管理员首选的文本编辑器。 默认情况下,Vim不显示行号,但可以轻松打开它们。Vim支持三种行编号模式,可帮助你浏览文件。除了标准的绝对行编号之外,Vim还支持相对行和混合行编号模式。 绝对行号 绝对行号是标准行号,它在每行文本旁边显示适当的行号。 要激活行编号,请设置数字标志: 按Esc键切换到命令模式。 按:(冒号),光标将移动到屏幕的左下角。输入set number或set nu,然后按Enter。 :set number 行号将显示在屏幕的左侧: 要禁用
入门笔记
2022/06/02
3.8K0
Unity WebView 插件⭐️(十五)特定模块 WebGL网页视图—WebGLWebView
上一篇文章对3D WebView 插件的 UwpWebView 做了一个详细的介绍说明
呆呆敲代码的小Y
2021/09/26
9390
jq 控制显示隐藏div
之前一直使用attr("style","display:none;")来隐藏div
用户1215037
2021/09/22
12.5K0
[1097]DIV的显示与隐藏
*********************div的显示和隐藏************************************
周小董
2022/04/13
5.4K0
WebView显示图片适配屏幕宽度
图片直接就是标签出来的,还是一张巨大的图片,直接导致webview加载只有截取了屏幕大小的宽度,看不到整张图片,测试要求适配屏幕宽度。于是有了这篇博客记录一下,在Webview的setWebViewClient()方法中WebViewClient中在加载完网页后执行一个JavaScript方法,这个JavaScript方法将所有网页中图片的宽度设置为屏幕显示宽度。
1025645
2018/08/23
1.7K0
高斯反向投影实现检测图像中的特定物
在图像处理中,我们通常需要设置感兴趣的区域(ROI,region of interest),来简化我们的工作。也就是从图像中选择的一个图像区域,这个区域是我们图像分析所关注的重点。
fengzhizi715
2018/08/24
4670
高斯反向投影实现检测图像中的特定物
如何使特定的数据高亮显示?
当表格里数据比较多时,很多时候我们为了便于观察数据,会特意把符合某些特征的数据行高亮显示出来。这不,公司的HR小姐姐就有这个需求,说她手头上有一份招聘数据,她想把“薪水”超过20000的行突出显示出来,应该怎么操作呢?
猴子聊数据分析
2020/02/26
5.9K0
Confluence 如何在页面中显示目录
在默认情况下,Confluence 是不能在页面中显示目录和当前页面中的内容导航的。
HoneyMoose
2021/12/14
2.1K0
Confluence 如何在页面中显示目录
在默认情况下,Confluence 是不能在页面中显示目录和当前页面中的内容导航的。
HoneyMoose
2022/01/11
2.6K0
Confluence 如何在页面中显示目录
OpenCV中图像的读取,显示与保存
相关函数:cv2.imread()、cv2.imshow()、cv2.imwrite()
py3study
2020/01/19
3.1K0
opencv显示图像
如果说我们在些项目的过程中会频繁的查看我们的图片,我们就可以直接给它封装一个方法:
淼学派对
2023/10/14
2740
opencv显示图像
如何使用几何画板画函数图像,如极坐标函数图像?
1、点击[绘图] 2、点击[网格样式] 3、点击[极坐标网格] 4、点击[绘图] 5、点击[绘制新函数] 6、点击[3] 7、点击[函数] 8、点击[cos] 9、点击[θ] 10、点击[确定] 11、点击[是]
裴来凡
2022/05/28
1.4K0
如何使用几何画板画函数图像,如极坐标函数图像?
Linux小技巧:如何在 Vim 中显示行号?
Vim 是一款出色的编辑器,大多数 Linux/UNIX 系统管理员每天都喜欢并使用它。
网络技术联盟站
2022/03/02
11.7K0
Linux小技巧:如何在 Vim 中显示行号?
如何用Python提取指定文档中的特定字符并加粗显示?
想把从网络上找来的文章(另存为new.docx或者new.html)与高考词汇表(另存为vocabulary.docx或者vocabulary.html)进行比对后,网络文章里的词汇为高考考纲词汇的,则加粗显示。
9135621
2020/04/23
8.7K1
如何用Python提取指定文档中的特定字符并加粗显示?
点击加载更多

相似问题

Cocoa Webview -仅显示特定的<div>

12

如何在webview特定页面上添加粘性页脚,如可点击的图像

10

如何在android webview中显示图像

17

在android Webview的Html中显示特定div内容

10

显示div中特定图像的数量

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档