前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬虫的10种思路

爬虫的10种思路

作者头像
生信技能树
发布2023-11-20 09:11:58
1060
发布2023-11-20 09:11:58
举报
文章被收录于专栏:生信技能树生信技能树

最近看到了浙江大学的陈老师课题组主编的生物信息学教材居然还配套了每个章节的PPT教案,而且持续更新了十年,比我做生物信息学还早!!!如下所示:

持续更新了十年

我简单看了看页面(https://bis.zju.edu.cn/binfo/textbook/)上面的对应的各个章节的ppt路径,很清晰:

对应的各个章节的ppt路径

简单的看了看它页面源代码即可:

代码语言:javascript
复制
<h4 id="4_1">第一章 生物信息学的概念及发展历史(<a href="4_1.pptx">下载ppt</a>)</h4>
<h4 id="4_2">第二章 生物学数据库及其检索(<a href="4_2.pptx">下载ppt</a>)</h4>
<h4 id="4_3">第三章 序列比对原理(<a href="4_3.pptx">下载ppt</a>)</h4>
<h4 id="4_4">第四章 蛋白质结构分析(<a href="4_4.pptx">下载ppt</a>)</h4>
<h4 id="4_5">第五章 真核生物基因组的注释(<a href="4_5.pptx">下载ppt</a>)</h4>
<h4 id="4_6">第六章 转录组学(<a href="4_6.pptx">下载ppt</a>)</h4>
<h4 id="4_7">第七章 非编码RNA(<a href="4_7.pptx">下载ppt</a>)</h4>
<h4 id="4_8">第八章 蛋白质组学(<a href="4_8.pptx">下载ppt</a>)</h4>
<h4 id="4_9">第九章 系统生物学(<a href="4_9.pptx">下载ppt</a>)</h4>
<h4 id="4_10">第十章 合成生物学(<a href="4_10.pptx">下载ppt</a>)</h4>
<h4 id="4_11">第十一章 分子进化与系统发育(<a href="4_11.pptx">下载ppt</a>)</h4>
<h4 id="4_12">第十二章 统计学习与推理(<a href="4_12.pptx">下载ppt</a>)</h4>
<h4 id="4_13">第十三章 生物信息学编程基础(<a href="4_13.pptx">下载ppt</a>) 
<h4 id="4_14">第十四章 新一代测序技术及其应用(<a href="4_14.pptx">下载ppt</a>)</h4>

其实都没必要去写爬虫了,因为路径太规则了。每个ppt路径就是页面(https://bis.zju.edu.cn/binfo/textbook/)加上后缀即可,在shell里面很容易输入如下所示的代码:

代码语言:javascript
复制
wget  https://bis.zju.edu.cn/binfo/textbook/4_{1..11}.pptx

使用R语言代码:

在R语言中,你可以使用download.file函数来下载文件。以下是相应的R代码:

代码语言:javascript
复制
for (i in 1:11) {
  url <- paste0("https://bis.zju.edu.cn/binfo/textbook/4_", i, ".pptx")
  filename <- paste0("4_", i, ".pptx")
  download.file(url, destfile = filename, mode = "wb")
}

上面的这个代码片段会循环下载链接中的11个文件,并将它们保存在本地,文件名格式为"4_1.pptx"、"4_2.pptx",以此类推。在download.file函数中,mode = "wb"用于指定以二进制模式下载文件。

你可以使用lapply函数来替代for循环,以下是使用lapply的R代码:

代码语言:javascript
复制
urls <- sprintf("https://bis.zju.edu.cn/binfo/textbook/4_%d.pptx", 1:11)
filenames <- sprintf("4_%d.pptx", 1:11)

download_file <- function(url, filename) {
  download.file(url, destfile = filename, mode = "wb")
}

lapply(seq_along(urls), function(i) {
  download_file(urls[i], filenames[i])
})

在这个例子中,lapply函数用于遍历urlsfilenames列表,对每一对URL和文件名调用download_file函数进行下载。sprintf函数用于创建带有格式的字符串,以生成URL和文件名。这样的写法相对于显式的for循环,更符合R语言的函数式编程风格。

有时候确实需要写爬虫

但是, 因为这样的路径很容易被网站作者修改规则,所以仍然是建议写爬虫,就需要了解一下网页html源代码里面的dom结构。文档对象模型(Document Object Model,DOM)是 HTML 和 XML 文档的编程接口,它表示页面的结构,使开发者可以通过编程方式访问和修改文档的内容、结构和样式。HTML 源代码中的 DOM 结构是一个树状结构,表示了页面元素之间的层次关系。其中:

  1. **Document (文档)**:整个 HTML 文档是文档对象模型的根节点。
  2. **html Element (html 元素)**:表示 HTML 文档的 <html> 元素。
  3. **head Element (head 元素)**:表示文档头部的 <head> 元素,包括页面的元信息、样式表和脚本等。
  4. **title Element (title 元素)**:表示 <title> 元素,包含页面的标题。
  5. **body Element (body 元素)**:表示文档的主体部分,包括页面中的所有内容。
  6. h1、p、ul、li、a 元素:表示页面中的各种元素,如标题、段落、列表、链接等。
  7. div 元素:用于组织和结构化文档内容,例如,页面的不同部分。
  8. **Attribute (属性)**:元素上的属性,例如,链接元素 <a> 上的 href 属性。

这个结构形成了一个树状层次,很容易解析后针对性获取不同层次的元素里面的信息哦!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用R语言代码:
  • 有时候确实需要写爬虫
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档