sorh sorh - 6 months ago 14
HTML Question

Can't parse Html properly, page seems to be cyphered (?)

I'm currently working on a crawler in Python, which is already crawling a genre page on http://lyrics.wikia.com/ to get all bands and albums and then crawls these links to get the links to specific songs to finally parse the lyrics and put them in a database so it can help me with an analysis on lyrical content.

I got my crawler to do all these steps, but when I parse the html from the lyric page with urllib and beautifulsoup I get weird content. I investigated this and there seems to be a script which stops people from crawling? When looking at the html-source code, the lyrics are cyphered like that below. I dont know what to call that so sadly I couldn't quite do further research by myself without knowing what to look for.

<div class='lyricbox'>&#73;&#116;&#32;&#119;&#97;&#115;&#32;&#119;&#104;&#101;&#110;&#32;&#73;&#32;&#114;&#101;&#97;&#108;&#105;&#122;&#101;&#100;<br />&#116;&#104;&#97;&#116;&#32;&#108;&#105;&#102;&#101;&#32;&#104;&#97;&#115;&#32;&#110;&#111;&#32;&#109;&#101;&#97;&#110;&#105;&#110;&#103;<br />&#110;&#111;&#32;&#112;&#117;&#114;&#112;&#111;&#115;&#101;&#44;&#32;&#110;&#111;&#32;&#113;&#117;&#97;&#114;&#114;&#121;<br />&#46;&#46;&#46;&#110;&#111;&#32;&#97;&#110;&#115;&#119;&#101;&#114;&#101;&#115;&#46;&#46;&#46;<br /><br />&#65;&#110;&#100;&#32;&#97;&#108;&#108;&#32;&#116;&#104;&#101;&#32;&#100;&#114;&#101;&#97;&#114;&#121;&#32;&#110;&#105;&#103;&#104;&#116;<br />&#116;&#104;&#97;&#116;&#32;&#104;&#97;&#100;&#32;&#98;&#101;&#102;&#97;&#108;&#108;&#101;&#110;&#32;&#97;&#99;&#114;&#111;&#115;&#115;<br />&#116;&#104;&#101;&#32;&#108;&#97;&#110;&#100;<br />&#73;&#32;&#115;&#108;&#105;&#112;&#112;&#101;&#100;&#32;&#105;&#110;&#116;&#111;&#32;&#97;&#32;&#114;&#101;&#118;&#101;&#114;&#121;<br />&#97;&#32;&#119;&#101;&#98;&#32;&#111;&#102;&#32;&#104;&#117;&#109;&#97;&#110;&#32;&#104;&#97;&#110;&#100;<br /><br />&#89;&#111;&#117;&#32;&#108;&#111;&#110;&#103;&#101;&#100;&#32;&#116;&#111;&#32;&#115;&#111;&#97;&#114;&#32;&#117;&#112;&#32;&#104;&#105;&#103;&#104;<br />&#116;&#111;&#32;&#99;&#97;&#114;&#101;&#115;&#115;&#32;&#116;&#104;&#101;&#32;&#115;&#105;&#108;&#107;&#121;&#32;&#119;&#105;&#110;&#100;&#115;<br />&#116;&#111;&#32;&#101;&#109;&#98;&#114;&#97;&#99;&#101;&#32;&#97;&#110;&#100;&#32;&#107;&#105;&#115;&#115;&#32;&#97;&#115;&#32;&#108;&#111;&#118;&#101;&#114;&#115;<br />&#46;&#46;&#46;&#116;&#104;&#101;&#32;&#101;&#116;&#104;&#101;&#114;&#46;&#46;&#46;<br /><br


When investigating with the google chrome developer tool, the lyrics are readable.

The example page was: http://lyrics.wikia.com/wiki/Agalloch:The_Wilderness

So long story short:
What is this? Where does it come from? How do I find a workaround? (keep in mind that I want to do that with around 20000 pages, so preferably it has to be fast and/or iteratable

Thanks in advance!

Answer

You should post code that we can help debug, your not using the right encoding scheme i'm guessing. Import requests works for me:

>>> import requests
>>> import bs4
>>> url = "http://lyrics.wikia.com/wiki/Agalloch:The_Wilderness"
>>> req = requests.get(url)
>>> soup = bs4.BeautifulSoup(req.text, "html.parser")
>>> lyrics = soup.find("div", {"class":"lyricbox"})
>>> lyrics.get_text().rstrip()

This will return:

"It was when [... ] the cosmos...Forevermore..."
Comments