python - 使用转义的 ascii 字符串正确解析 html 页面

标签 python html parsing web web-crawler

我目前正在用Python开发一个爬虫,它已经在http://lyrics.wikia.com/上爬行一个流派页面。获取所有乐队和专辑,然后抓取这些链接以获取特定歌曲的链接,最后解析歌词并将它们放入数据库中,这样它可以帮助我分析歌词内容。

我让我的爬虫完成所有这些步骤,但是当我使用 urllibbeautifulsoup 解析歌词页面的 html 时,我得到了奇怪的内容。我对此进行了调查,似乎有一个脚本可以阻止人们爬行?当查看 html 源代码时,歌词的加密方式如下。我不知道该怎么调用它,很遗憾,我无法在不知道要寻找什么的情况下自己进行进一步的研究。

<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 

使用 google chrome 开发者工具进行调查时,歌词是可读的。

示例页面为:http://lyrics.wikia.com/wiki/Agalloch:The_Wilderness

长话短说: 这是什么?它从何而来?我如何找到解决方法? (请记住,我想对大约 20000 个页面执行此操作,因此最好它必须快速和/或可迭代

提前致谢!

最佳答案

您应该发布我们可以帮助调试的代码,我猜您没有使用正确的编码方案。 导入请求对我有用:

>>> 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()

这将返回:

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

关于python - 使用转义的 ascii 字符串正确解析 html 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169347/

相关文章:

Python tarfile 和排除

Python 设置属性等于另一个属性

python - Django 表单集在多对多关系上变慢

python - 使用 NATURAL JOIN 的 sqlite 查询会产生额外的记录

python - 解析生成器 Python 2

python - 如何在 Python 3 的 dateutil 解析器中解析超过 24 小时的日期?

javascript - 动画文本从底部向上显示 html/css

html - 如何将表格中的列向左移动?

javascript - React js - 显示或隐藏 div

javascript - JSON 对象到 Rails 对象