你可以通過使用ruby中的mechanize gem進行網頁掃描來獲取PMIDS列表。做gem install mechanize
然後你就可以通過運行下面的Ruby腳本獲得所需的結果:
require 'mechanize'
agent = Mechanize.new
elements = agent.get('http://www.ncbi.nlm.nih.gov/pubmed/?term=Cancer+TFF').search(".rprtid").to_a
pmids = elements.map{|x| x.elements.last.text}
puts "List of pmids:"
puts pmids
File.open("output_pmid_abstracts.txt", "w") do |file|
for pmid in pmids
puts "Getting Abstract for PMID: #{pmid}"
abstract = agent.get("http://togows.dbcls.jp/entry/ncbi-pubmed/#{pmid}/abstract").body
file.puts "pmid:#{pmid}"
file.puts abstract
file.puts ""
end
end
puts "Done"
這將使output_pmid_abstracts.txt
文件在當前目錄將類似於下面:
pmid:27220894
BACKGROUND & AIMS: Gastric cancer has familial clustering in incidence, and the familial relatives of gastric ...
...
pmid:26479350
Trefoil factor family (TFF) peptides are a group of molecules bearing a characteristic three-loop trefoil domain ...
...
PS:請確保你絕對需要先安裝mechanize
寶石!否則,你會明顯得到錯誤:require': cannot load such file -- mechanize (LoadError)
,因爲它無法找到所需的庫/寶石。無論如何,即使在gem install mechanize
之後,您也會收到要求錯誤,然後請執行sudo gem install mechanize
然後再嘗試。
更新1:
正如在評論中提及的NIK,這段代碼只加載在第一頁(20項),即使它有更多的搜索。所以我正在更新代碼解決這個問題。有些網址現在有所不同。
我首先通過API獲取所有pmids的列表,然後通過webscraping查找每個pmid的摘要。
require 'mechanize'
agent = Mechanize.new
search_terms = "Cancer+TFF"
url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=#{search_terms}&retmax=10000"
all_pmids = agent.get(url).search("IdList").text.strip.split("\n").map{|x| x.strip.to_i}
puts "List of pmids:"
puts all_pmids
File.open("output_pmid_abstracts.txt", "w") do |file|
for pmid in all_pmids
puts "Extracting Abstract for pmid: #{pmid}"
abstract_url = "http://www.ncbi.nlm.nih.gov/pubmed/#{pmid}"
abstract = agent.get(abstract_url).search(".abstr").children[1].text rescue " "
file.puts "pmid:#{pmid}"
file.puts abstract
file.puts ""
end
end
PS:這可能是一些紙不具有抽象可言:例如:16376814(檢查here)
希望它可以幫助:)
您收到此錯誤,因爲你還沒有安裝'mechanize'庫。請執行'gem install mechanize'。確保在irb中,您可以運行'require'mechanize「'而不出錯,然後只嘗試腳本。 –
btw @nik,你不需要做'chmod + x reterive_abstract.rb'。雖然它並沒有造成任何傷害,但只有在您要通過'。/ reterive_abstract.rb'運行腳本而不是'ruby reterive_abstract.rb'時才需要。但在這種情況下,您必須在第一行的ruby腳本中添加shebang,告訴腳本它是一個ruby腳本。 –