爬虫写完了,运行了,然后呢?
爬虫这个东西,不是刚需,但是好玩,而且也是很多朋友圈彻底走入编程圈的第一推动力,我也亲自示范过很多有趣的爬虫示例:
peerJ期刊探索 这个里面我介绍了R爬虫
生信职位拉勾网爬取-附生信行业职业发展交流群 这个是小伙伴介绍的python爬虫!
其实本来应该是有很多,我懒得一一找到链接了,最近给一个小伙伴布置了一个爬虫小任务,也就是我昨天给大家卖的关子:
可以试用一下这个号称能取代GATK best practice的工具套件
为什么我会突然间浏览到biostar,因为我希望小伙伴写爬虫爬取biostar全部问答,然后根据点赞数,浏览数,回答数,然后可以简单排序,挑选有价值的问题进行分析。
下面是作业原文
之前答应师兄爬取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
二、准备爬虫所需信息
构建url:观察每一页的url变化规律"https://www.biostars.org/?page=2&sort=update&limit=all%20time&q=" 变化的只有链接里"page=2"中的数字。
定位所需内容: 打开页面->点击F12->点击左上角带箭头的小图标->点击屏幕上所要定位的内容->右击元素审核界面中所定的位置->点击copy、copy xpath。使用xpath即可定位所需内容。
三、开始爬取
1.加载相关的R包
library(rvest)
2.爬取biostar所有问题、点赞数、阅读数、以及问题链接
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:爬取成功与否与网络条件及网站反爬虫机制有关,我在爬取过程中出现过几次停爬。我的操作是:中断爬虫,修改循环的起始点,从中断处继续往下跑循环。
3.根据阅读数和点赞数对问题排序。
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来解决。