楼主: stevekkk
1619 2

[程序分享] rvest爬虫在节点名为变量的情况下批量抓取网页信息 [推广有奖]

  • 0关注
  • 0粉丝

已卖:5份资源

本科生

87%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
119.4751
学术水平
6 点
热心指数
6 点
信用等级
6 点
经验
5988 点
帖子
37
精华
0
在线时间
146 小时
注册时间
2013-8-10
最后登录
2023-12-28

楼主
stevekkk 发表于 2021-3-12 12:04:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
一般情况下,rvest爬虫在抓取时,先找到节点,然后顺次抓取节点下的所有信息。

在特殊情况下,会出现:一条信息对应一个节点,而这些节点名又是成规律出现的。例如:

信息01 对应节点名:#search_company_0 > div > div.content > div.header > a
信息02 对应节点名:#search_company_1 > div > div.content > div.header > a
信息03 对应节点名:#search_company_2 > div > div.content > div.header > a
......
信息20 对应节点名:#search_company_19 > div > div.content > div.header > a

此时,设定好一个节点,只能抓取一条信息。

那么如何批量抓取这类节点信息?



思路:
1、根据文件名特点,构建文件名变量
2、用for循环依次执行抓取不同文件名下的节点内容
3、输出结果



实践:
1、文件名构建
文件名变化的只有数字部分,因此将整个节点作为一个文件名看待[注1],用paste0函数表示为:

filenames<-paste0("#search_company_",0:19," > div > div.content > div.header > a")

结果为:

1.jpg



[注1] :此处有个细节,就是构建好的文件名,都是自带“”符号的,在节点填写时,不能再加“”符号,否则输出时总会出现“character(0)”的提示。因此,要将整个节点名作为一个名字看待,而不能只设定有变量的部分,即("#search_company_",0:19),由于符号原因会造成错误。


2、构建for循环:


library(rvest)
web=read_html("https://www.tianyancha.com/search?key=%E9%87%91%E7%89%9B%E8%A7%92%E7%8E%8B")

filenames<-paste0("#search_company_",0:19," > div > div.content > div.header > a")
for(i in filenames)
{
name=web%>%html_nodes(i)%>%html_text()
print(name)
}

此处用print(name)包含在循环内,输出每次抓取的name信息。如果去掉print循环输出,只能获得最后一个name抓取的信息(当然,此处也可以构建一个name变量名,分别对应每个节点变量名,然后把每次抓取的信息保存在数据框里,暂略)。

3、结果:

2.jpg



20个规律节点对应的20条名称信息就抓取成功了。同样可用于抓取类似节点的企业注册资金、存续状态、联系方式等相关信息。








二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Vest VES Est filename company rvest 节点名变量 爬虫

已有 2 人评分论坛币 收起 理由
cheetahfly + 20 观点有启发
llb_321 + 5 精彩帖子

总评分: 论坛币 + 25   查看全部评分

沙发
三重虫 发表于 2021-8-16 18:58:33

藤椅
yangming98 发表于 2021-8-17 22:24:47 来自手机
stevekkk 发表于 2021-3-12 12:04
一般情况下,rvest爬虫在抓取时,先找到节点,然后顺次抓取节点下的所有信息。

在特殊情况下,会出现:一 ...
好的好的好的好的好的好的好的

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 11:13