爬虫的10种思路

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

持续更新了十年

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

对应的各个章节的ppt路径

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

<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里面很容易输入如下所示的代码:

wget https://bis.zju.edu.cn/binfo/textbook/4_{1..11}.pptx

使用R语言代码:

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

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代码:

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 属性。

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

 

Comments are closed.