Further inspecting the source code of the downloaded page, I found the following:
<li id="nav-sequences"
class="module-load transcript"
wname="sequences"
href="/rest/widget/transcript/K06C4.12/sequences">
<span class="ui-icon ui-icon-close module-close" wname="sequences"
</span>
Sequences
</li>
This suggested me to have a look at http://www.wormbase.org/rest/widget/transcript/K06C4.12/sequences and I obtained a page containing the elements found in the DOM inspector.
This can be parsed, for instance using the bs4
python module:
# To get the page
import requests
# To parse the page content
from bs4 import BeautifulSoup
# To get this into Biopython
from io import StringIO
from Bio import SeqIO
rest_template = "http://www.wormbase.org/rest/widget/transcript/{accession}/sequences"
rest = rest_template.format(accession="K06C4.12")
# This did not work with "html.parser"
soup = BeautifulSoup(requests.get(rest).text, "html5lib")
def generate_fasta(soup):
name = None
for div in soup.find_all("div"):
if "ui-helper-hidden" in div["class"]:
if div["id"] == "content":
fasta = SeqIO.read(StringIO(div.text), "fasta")
description_fields = fasta.description.split()
if len(description_fields) == 4:
fasta.id = "_".join(description_fields[:2])
if name is None:
name = fasta.name
elif len(description_fields) == 2:
# This assumes that the "conceptual_translation"
# is after the "unspliced + UTR" or "spliced + UTR"
# Otherwise, one would need to pass
# the accession as function parameter
fasta.id = f"{name}_translation"
else:
fasta.id = "_".join(description_fields)
yield (fasta.id, fasta)
records_dict = dict(generate_fasta(soup))
print(records_dict['K06C4.12_spliced'])
print(records_dict['K06C4.12_translation'])
Output:
ID: K06C4.12_spliced
Name: K06C4.12
Description: K06C4.12 spliced + UTR
Number of features: 0
Seq('ATGGCCCCACCAAAGCCGTCTGCTAAAGGAGCAAAGAAAGCCGCCAAGACCGTC...TAA', SingleLetterAlphabet())
ID: K06C4.12_translation
Name: conceptual
Description: conceptual translation
Number of features: 0
Seq('MAPPKPSAKGAKKAAKTVTKPKDGKKRRHARKESYSVYIYRVLKQVHPDTGVSS...SK*', SingleLetterAlphabet())