私はプログラム的に公共のアーカイブにゲノムアセンブリを説明し、このWebページからテキストを抽出しようとしている:、私は私がダウンして追跡し、研究の受託を抽出したいアセンブリの数千を持っているどのようにPython 2.7を使用してWebページからテキストを抽出するのですか?
http://www.ebi.ac.uk/ena/data/view/ERS019623
"PRJ"で始まる表の一番左のコードです。これらのアセンブリのそれぞれのURLは、上記のものと同じ形式です(「http://www.ebi.ac.uk/ena/data/view/ERS ******」)。私は自分のアセンブリごとにERSコードを持っているので、それぞれのURLを構築することができます。
URLの末尾に "& display = XML"を追加すると、最初にXMLを印刷します(または、少なくとも私はページ全体のXMLを印刷していると推測しています)なぜなら、問題は研究受託番号「PRJ ******」がここに見られる場所ではないからです。
import urllib2
from bs4 import BeautifulSoup
import re
import csv
with open('/Users/bj5/Desktop/web_scrape_test.csv','rb') as f:
reader = csv.reader(f) #opens csv containig list of ERS numbers
for row in reader:
sample = row[0] #reads index 0 (1st row)
ERSpage = "http://www.ebi.ac.uk/ena/data/view/" + sample + "&display=xml" #creates URL using ERS number from 1st row
page = urllib2.urlopen(ERSpage) #opens url and assigns it to variable page
soup = BeautifulSoup(page, "html.parser") #parses the html/xml from page and assigns it to variable called soup
page_text = soup.text #returns text from variable soup, i.e. no tags
ERS = re.search('ERS......', page_text, flags=0).group(0) #returns first ERS followed by six wildcards
ERR = re.search('ERR......', page_text, flags=0).group(0) #retursn first ERR followed by six wildcards
print ERS + ',' + ERR + ',' + "http://www.ebi.ac.uk/ena/data/view/" + sample #prints ERS,ERR,URL
これは非常によく働いていた:私は以下のコードを使用して、私は同じウェブページから必要に応じて別のコード、常にフォーマットのある走行アク「ERR ******」を抽出するために、これを利用していました研究のアクセス権はXMLにはないので、私はこれをアクセスするために使用することはできません。私は
...
from bs4 import BeautifulSoup
from urllib2 import urlopen
BASE_URL = "http://www.ebi.ac.uk/ena/data/view/ERS019623"
def get_category_links(section_url):
html = urlopen(section_url).read()
soup = BeautifulSoup(html, "lxml")
print soup
get_category_links(BASE_URL)
しかし、再び、私はどちらか、この出力での研究受託を見ることができない。
また、私はこれを行うことによって、HTMLをダウンロードするには、再度BeautifulSoupを使用しようとしました別のpythonモジュール、lxmlを使ってXMLとHTMLを解析しようとしましたが、そこには何の不運もありませんでした。
ページ上の要素を右クリックして検査すると、Ctrl + F - > PRJを実行して研究受託を見つけることができます。
私の質問はこれです:私はinspect要素、XMLまたはHTML(または何か他のもの)で見ているコードは何ですか?なぜ私は、BeautifulSoupを使ってHTMLを解析しようとすると、私のコンソールに表示されるコードと違って見えますか?そして最後に、どのようにこれらのウェブページから研究受託番号(PRJ ******)をスクラップすることができますか?
(私はわずか2ヶ月間コーディングしてきましたが、私は完全に独学していますので、この質問のやや混乱した性質のために謝りますが、私が試していることが分かっていれば幸いですどのような提案や助言をいただければ幸いです。)
多くの場合、プログラムでHTTPリクエストを行うよりもブラウザのコンテンツが異なる場合は、探しているコンテンツがJavaScriptのコードによって動的に生成されるためです - あなたのブラウザは実行しますが、独自のコードは実行しません。セレンのようなものを試してみると、完全なコンテンツを得ることができます。 –