Nicholas J. DeVito,Georgia C. Richards & Peter Inglesby
??和?源?于?究??非常??。?像?据收集??普遍的任?自?化?使?目?得更?高效?可重?,?而提高生?率??果?出。最???得到一?可共享、可?用的?据收集工作流程,使得其他?究人?也可以??、使用和拓展?的?究成果,形成在?算上可?用的?据收集工作流。
?建??爬?工具?建立自己的在??究。?片?源:Shutterstock
我?在最近的?目中,通?分析一系列?尸?告
(https://www.judiciary.uk/subject/prevention-of-future-deaths/)
??助避免未??生死亡。整??目需要下?超?
3000
?
PDF
文件?搜索出?阿片相?的死亡,?是一??大的?据收集工作。在?其他??的?究人?探?后,我????是使用自?化方式?理的一??佳机?。???天的工作后,我?就?出了可以快速、高效、可?用的程序收集
PDF
文?
(https://github.com/georgiarichards/opioiddeaths)
,??每一?案例?建出相?的?子表格。
我????常使用的??工具被??
“
??爬?
”
。我?使用?去??床??注?中收集信息,?不??富
OpenPrescribing.net
?据,用于追踪英格?的初????方?据。如果?有爬?的?助,??是一?十分冗?甚至不可能完成的任?。
在?尸?告?目中,人工方式可以在一小??打??保存?
25
??告,而?在程序可以在一小??打??保存下超?
1000
??告,在?省大量的人工??的同?,?效率提高到了原先的
40
倍。更重要的是,??方式?通?共享?据集?造了新的?作机?,?能通?重新?行程序?持?追踪新?布的?告,不?更新?据集。
在?些????的基?上,我??在接下?的?容里?述爬?的基本知?,以及如何在?究中使用爬??提高科?效率。
爬?如何?行?
??爬?是可以??站中抽取
(
爬取
)
特定信息的程序。??的??和?容通?超文本???言
(Hypertext Markup Language, HTML)
??行??,?可以通???器的
“
?看源代?
”
或
“
??元素
”
??看到(注:一般??器点?右?
/F12
就能看到?看源代?
/
??元素)。爬?可以理解
HTML
??其?行解析,?中抽取有用的信息。例如,?可以??一只抽取特定?域的信息的爬?,包括抽取在?文?或者下??接到本?面的文件。
通常??,一?典型的爬?程序需要?所有可能的
URL
?行迭代?理,例如?取?
www.example.com/data/1
到
www.example.com/data/100
的?据,?保存每一?中?需要的?西,同??不?在抽取?程中引入人???的??。一旦程序完成??,?可以在任何?需要的?候重新爬取?据,不??需要假??站在?大多?情?下??保持不?。
如何着手?
?不是所有的爬?都需要?程。有?多像
webscraper.io
??的?件在??器中可以?箱?用,只需要点点鼠????面中感?趣的?容,??就能自?地?助?解析相?的
HTML
?容??出?需要的?据。
?一?稍微??的方式是?建自己的爬?系?,?然需要?手?代?,但是??予?更多的可控性。我?主要使用
Python
?建爬?系?,但任何?代爬??言都可以做到爬取?据
(
具???,
Python
一般使用
Request
和
BeautifulSoup
包,
R
?言?更多使用
rvest
包
)
。在?始?程前,可以先搜索是否有前人已???需要的?据源??爬?了,如果?有也不用?心,无????言在??上都有充足的免??程供???和理解,?助???出自己的爬?。
和大多??程一?,爬?的???然也免不了??的?程,不同的?站?有不同的?据???系和各?不同的
HTML
??形式。然而解???的?程却十分有益,?着?不?地解???,不?地克服困???化成?意?的一部分。
?得注意的是:爬?程序?行的??取?于爬取分析的?面?量、???接??以及?站服?器的性能,有的可能需要?天的??,所以在私有服?器上?行爬?程序?比?好。如果在自己的?人??上?行,?需要?保??不??入睡眠模式,中????接。同?也要仔??想爬?失?的原因,?仔?地??下爬?的日志信息,以便知道?些可行,?些不行,?些需要?一步深?。
三思而后行
?取?据容易??
?ClinicalTrials.gov上每天爬取所有30多万??据,?于我?的FDAAA TrialsTracker(https://fdaaa.trialstracker.net/)?目而言是一?十分?大的任?,但幸?的是,ClinicalTrials.gov?他?的完整?据?放下?了;我?的?件只需要每天下?一次?放的?据集就好。我?的EU TrialsTracker?目就?有那?幸?了,所以我?要每月爬取EU registry(https://github.com/ebmdatalab/euctr-tracker-code)。
如果?有批量下??接,那就???站是否提供了?用程序接口(application programming interface, API)。API提供了?件??站直接?行交互的接口,而无需?求HTML?容。?直接爬取???容相比,??方式?更?便捷,但也?????外的API?用。我?在工作中?常使用PubMed API。此外,?可以??站??者直接?系,看看是否能?直接??提供?据。
?站是否可爬?
一些?站??有直接提供HTML形式的可用?据,需要更?先?的技???取?据(可以到StackOverflow等?答?站上?求?助)。?一些?站?有?入???和反DoS等反爬措施,增加了爬取的?度。?有少??站不想??人爬取,在?建?就不鼓?爬?。此外?多?站?提供了一套爬???在根目?下的robots.txt中,只有按照?些????站?行交互,才能?行有效的信息爬取。
?的程序是不是一只有?貌的爬??
?的程序每一次向?站?求?据都需要?用?站的?源服?。?我?在??器中?????不??送太多?求,但是由程序??的爬?可以在一分??向服?器?送成百上千??求。??高??的???使得?站?行?慢甚至宕机(?繁的?求无意中成?了??站的DoS攻?)。?可能?使?的IP被?站??地、甚至永久地封禁??所以????可能地?少?于?站的???力。一方面可以在每次?求后?隔?秒,?一方面也可以在robots.txt中???站期望的?隔??。
?据是否有限制?
需要??抽取?据的版?或?可。一般情?下,?可以使用爬取的?据,但要共享?些?据?,就需要仔?考?是否符合法律法?。理想情?下,?站?提供??的?容?可?。但无??是否分享了?据,?都??在像GitHub??的?源社?公?的?的代?,?是?源文化???的重要部分,可以?其他有需要的人?松地?到、????展?的代?。
我?强烈推?更多的?究人???代???行?究,?向社?共享?些代?(https://stackoverflow.com/)。在?目中如果手工收集?据遇到困?,那?爬?也?是一?不?的解?方案,同?也是?好的入??程?目。爬?的??程度足?展示?件???程中的重要?容,但同?非常?富的?料也?初?者提供了充足的??信心。在??上????的代??外界?行交互,感?就像?有了?究超能力一?美妙,??在等什???
原文以
How we learnt to stop worrying and love web scraping
????表在
2020
年
9
月
8
日的《自然》??版?
ⓒ nature
doi: 10.1038/d41586-020-02558-0