以下のスクリプトは、WebページのURLの一部を構成するコードのリストを含むcsvファイルを作成したものです。次に、各Webページを開き、PUBMED ID(8桁の数字)をスキャンし、見つけた各PUBMED IDをコンマで区切ってCSVファイルに書き込むことができるようにします。Pythonモジュール、BeautifulSoupを使用して関数の出力を解析する
25961941,PRJEB3215
25909750,PRJEB3215
26974227,PRJEB3215
27331909,PRJEB3215
25038069,PRJEB2705
25480686,PRJEB2340
私の問題は、私はちょうどので、私はそれを返すようにしたい機能からoutuputを印刷したくないということです:
import csv
from urllib2 import urlopen
from bs4 import BeautifulSoup
import re
def get_PMID(y):
url = 'http://www.ebi.ac.uk/ena/data/view/' + y + '&display=xml'
project_page = urlopen(url)
soup = BeautifulSoup(project_page, "html.parser")
page_text = soup.text
PUBMED_TF = bool(re.findall('PUBMED', page_text))
if PUBMED_TF is True:
for x in soup.find_all('db', text='PUBMED'):
PUBMED = (x.fetchNextSiblings()[0].text)
print PUBMED + ',' + y
else:
return y
with open('/Users/bj5/Desktop/web_scrape_test.csv','rb') as f:
reader = csv.reader(f)
for row in reader:
study_accession = row[0]
get_PMID(study_accession)
は、この形式での出力は、私が欲しいものを正確にしている。このようになります。それを別の関数に解析することができます。しかし、関数からprintコマンドを取り除いてリターンで置き換えようとすると、出力の一部が失われてしまいます。以下を参照してください:
import csv
from urllib2 import urlopen
from bs4 import BeautifulSoup
import re
def get_PMID(y):
url = 'http://www.ebi.ac.uk/ena/data/view/' + y + '&display=xml'
project_page = urlopen(url)
soup = BeautifulSoup(project_page, "html.parser")
page_text = soup.text
PUBMED_TF = bool(re.findall('PUBMED', page_text))
if PUBMED_TF is True:
for x in soup.find_all('db', text='PUBMED'):
PUBMED = (x.fetchNextSiblings()[0].text)
return PUBMED + ',' + y
else:
return y
with open('/Users/bj5/Desktop/web_scrape_test.csv','rb') as f:
reader = csv.reader(f)
for row in reader:
study_accession = row[0]
print get_PMID(study_accession)
ができます:
25961941,PRJEB3215
25038069,PRJEB2705
25480686,PRJEB2340
私は、各ページから最初のPUBMED IDが、すべてを失っています。
誰もがこれと私はそれを修正する方法なぜ私に教えてもらえますか?
答えてくれてありがとうございました。私はreturnステートメントがループ内にまだあるので、リストを使うことは私が必要としていたことではないかと思ったので、ifとelseステートメントの両方の出力をリストに追加してからループの外にリストを返した。 –