前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫写完了,运行了,然后呢?

爬虫写完了,运行了,然后呢?

作者头像
生信技能树
发布2018-12-11 15:07:29
1.1K0
发布2018-12-11 15:07:29
举报
文章被收录于专栏:生信技能树生信技能树

下面是作业原文

之前答应师兄爬取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包

代码语言:javascript
复制
library(rvest)

2.爬取biostar所有问题、点赞数、阅读数、以及问题链接

代码语言:javascript
复制
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.根据阅读数和点赞数对问题排序。

代码语言:javascript
复制
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运行也是可以拿到爬虫结果的!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、善用搜索
  • 二、准备爬虫所需信息
  • 三、开始爬取
    • 1.加载相关的R包
      • 2.爬取biostar所有问题、点赞数、阅读数、以及问题链接
        • 3.根据阅读数和点赞数对问题排序。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档