- 爬虫库
- 本次任务
- 具体情况
- 一些方法
- 代码
我目前接触到的爬虫库有scrapy
,requests + Beautifulsoup or etree
以及这个新遇到的selenium
。
其本质上的不同我并不是很了解,但是从调用的方式方法上来看,可以浅显地这么进行分类:
scrapy
通过实现类的继承,通过对于自身方法的重写实现爬取动作。优势:快,非常快 ;缺点:难以调试,不好写 ;适用情形:大型爬虫项目
selenium
的本身思路在于调动浏览器本身进行 *** 作,会加载各种的脚本渲染等,因此其缺点非常明显:慢,很慢,贼慢。但是正因为所有传递的信息都会经手,且通过调动庞大的浏览器结构,
selenium
可以完成人的任何 *** 作,包括点击、输入从而加载动态网页。适用情形:网页的结构多变,一些信息需要互动才能得到。
requests + ()
在平时写小实验的时候用得比较多,其语法相对简单,逻辑容易理清。相对于上面两个来讲,
requests
包适用于静态网页,达不到selenium
的灵活度但比他快,另一方面比scrapy
要慢但好写。总体来讲是一个适合写小实验的库。
具体的实验可以参考这个网页。
- root paper: Highly accurate protein structure prediction with Alphafold 一篇Nature近几年来影响比较大的一篇文章,大致的核心是深度学习在生物蛋白质结构方面的应用。
- 任务描述:以root paper为原点,向上(引用root paper的文献)查找数代的文献,向下(Reference)查找数代的文献。
本质上是一个类似于树结构的形式,但是由于以root paper为起点,同一级的文献可能存在相互引用的情况从而形成一个闭环,所以从图论的定义上来看并不是一棵严格的树。
但是毕竟是工程,数学上不必那么的严谨,达意是最重要的。
- 爬取网站:非常不建议大家选取Web Of Science进行爬取,因为他的反爬做得太好的,各种空子补的也特别快。
我在做的时候,一个3月17号可以用的接口在4月9号就被堵上了。
建议大家找一些其他的网站哈,就不明指了,毕竟大型的文献搜索网页也就那么几个,自己试试就知道了。
我要爬取的网页,其特点是每篇不一定会把文献或被引列在网站上,运气好或者名气比较大的文章可能会把其Reference以及Cited by放到网页里面查看,大部分不知名的小文章一般是没有这种待遇的。
这也是小网站的一个缺点吧,虽然好爬但是维护得比较差。
在爬的时候遇到的一些问题,在这里总结一下:
- 在通过
selenium
的webdriver
发送任何请求(get)
以及搜索(find_element)
的时候一定要用try...except
语句,否则爬到一大半因为一时抽疯,或者由于网速原因页面没有及时更新导致崩溃,哭都没地儿去。 driver
定位某个数据的时候支持Xpath和CSS,但是我有一点必须提醒,也是我觉得在设计命名的时候非常不好的地方。其有两个方法:
find_element
与find_elements
,可以理解成scrapy shell
中response
的extract_first
与extract
的区别。前者拿第一个检索到的符合检索要求的元素,后者返回所有找得到的元素。
仅仅拿一个s进行区分真的不好,自己在做与debug的时候也须注意。
- !!重要!!在通过Xpath定位的时候,如果是通过f12里点击右键–>复制–>复制Xpath的方式找到的Xpath,其通常有一个类似于数组里面的取位置的东西,比如
//*[@id="b_results"]/li[3]/div[1]/h2/a
里面的[3]和[1]。我不建议通过这种方式进行索引,特别当你的网页是动态的,并且不同网页之间结构上有着或多或少差别的时候,很有可能会出现检索不到或者检索的不是你想要的元素的情况。
所以建议大家在第一步拿的时候去掉这些东西,并选择用
class id
的信息进行再筛选。
driver
的检索有几种方法,比如find_element_by_xpath
或者find_element_by_css
,但是在调用的时候会warning说这些都不要用啦,来用用这个find_element(by=,value=)
,然后调用By.XPATH
来调用同一个功能,我的评价是脱裤子放屁,多此一举,写起来还麻烦。
后面有一些新想法了会再写写,截止到源代码提交完毕
我们的小组作业这周二教,还请大家暂时包容,交完作业就分享源码 \doge
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)