下面是作业原文
之前答应师兄爬取biostar论坛全部帖子(https://www.biostars.org/),并根据阅读数和点赞数 挑选排名靠前的问题翻译。
看到这个问题,我首先想到的是R和python。基础的爬虫无非是:构建URL、根据页面结构解析爬取关键信息、整理数据格式输出结果。
如果作为一个爬虫小白,首先要做的是去利用周边可利用的资源,互联网时代,你想要的资料网络上基本上都有。
于是我上网搜索了"R 爬虫",发现一个叫做"revst"的R包。
其核心函数:
read_html
:read_html (url) 爬取整个页面html_nodes
: 选择提取文档中指定元素的部分(用于定位到待提取的信息)html_text
提取标签内的文本(用于提取你定的位置的内容)
详情可以参考:https://blog.csdn.net/weixu22/article/details/79237512
library(rvest)
biostars_inf<-data.frame()
for (i in 1:2163) {
#2163是总的页面个数
print(i)
#循环构建url
web<-read_html(paste0("https://www.biostars.org/?page=",i,"&sort=update&limit=all%20time&q="))
#爬取问题
question<-web %>% html_nodes(xpath = "//*[@id=\"post-list\"]/div/div[3]/div/a") %>% html_text()
#爬取点赞数
vote<-web %>% html_nodes(xpath = "//*[@id=\"post-list\"]/div/div[1]/div[1]/div[1]") %>% html_text()
vote<-gsub("k", "000", vote)
vote<-as.numeric(as.character(vote))
#爬取阅读数
views<-web %>% html_nodes(xpath = "//*[@id=\"post-list\"]/div/div[1]/div[3]/div[1]") %>% html_text()
views<-gsub("k", "000", views)
views<-as.numeric(as.character(views))
#构建问题链接qustion_url
short_question_url<-as.character(web %>% html_nodes(xpath = "//*[@id=\"post-list\"]/div/div[3]/div[1]/a") %>% html_attrs())
question_url<-paste0("https://www.biostars.org",short_question_url)
biostars<-data.frame(question,vote,views,question_url)
biostars_inf<-rbind(biostars_inf,biostars)
}
tip:爬取成功与否与网络条件及网站反爬虫机制有关,我在爬取过程中出现过几次停爬。我的操作是:中断爬虫,修改循环的起始点,从中断处继续往下跑循环。
topviews<-biostars_inf[order(as.numeric(biostars_inf$views),decreasing=T),]
topvote<-biostars_inf[order(as.numeric(biostars_inf$vote),decreasing=T),]
让我们看看点赞数最多的5个问题?
What Are The Most Common Stupid Mistakes In Bioinformatics?
The Biostar Handbook. A bioinformatics e-book for beginners
Recommend Your Favorite Bioinformatics Books
What Tools/Libraries Do You Use To Visualize Genomic Feature Data?
Your Favorite Bioinformatics Blogs (March 2010)
那查看数最多的五个问题有时啥呢?
Gene Id Conversion Tool
Understanding up and down regulated genes from LOG2 foldchange or foldchange
How Do I Draw A Heatmap In R With Both A Color Key And Multiple Color Side Bars?
Tools To Calculate Average Coverage For A Bam File?
How To Filter Mapped Reads With Samtools
下面是我的点评
怎么说呢,要求一个一直用python的小伙伴来刻意使用R写爬虫的确难为他了,所以可以看到代码里面初始化变量,然后for循环的修改变量,因为代码里面爬虫获取内容耗时很长,所以这个代码的慢速并不能体现出来,这种代码方式肯定是不推荐的!
其次,爬虫里面没有加入随机休眠函数,所以很容易被反爬机制检测到而中断,当然高级操作,还有使用多个代理IP来解决。
重点来了
难道爬取到的6.5M的 6万多个问题记录就简单排序吗?
更深层次的分析有哪些?
比如词云?
再比如根据问题的时间做趋势问题,流行度?
感兴趣的朋友可以继续留言,或者来信( jmzeng1314@163.com )交流,获取我们爬虫的结果。
当然,你直接复制粘贴里面的代码去R运行也是可以拿到爬虫结果的!