我正在尝试解析网页,以便在excel或csv文件中保存一些数据。
import urllib.request
import xml.etree.ElementTree as ET
url = "http://rusdrama.com/afisha"
response = urllib.request.urlopen(url)
content = response.read()
root = ET.fromstring(content)
使用fromstring方法ElementTree解析页面时出现以下错误:
Traceback (most recent call last):
File "D:/PythonProjects/PythonMisc/theater_reader.py", line 7, in <module>
root = ET.fromstring(content)
File "D:\Python\Python35\lib\xml\etree\ElementTree.py", line 1333, in XML
parser.feed(text)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 49, column 14
收到的页面部分如下:
<script>
jQuery(document).ready(function(){
jQuery(window).scroll(function() {
var scroll = jQuery(window).scrollTop();
if (scroll >= 100) {
jQuery(".t3-header").addClass("solid");
}
if (scroll <= 100) {
jQuery(".t3-header").removeClass("solid");
}
});
})
</script>
特别是第49行:
if (scroll <= 100) {
所以问题在于打开角括号似乎被处理为开始标记符号。 我看到了几个类似的问题,但无法理解如何处理这种情况。
答案 0 :(得分:3)
您正在尝试使用XML解析器解析HTML。使用正确的工具,HTML解析器,而不是:BeautifulSoup
或lxml.html
是最受欢迎的。
演示:
>>> from bs4 import BeautifulSoup
>>> import urllib.request
>>>
>>> url = "http://rusdrama.com/afisha"
>>> response = urllib.request.urlopen(url)
>>>
>>> soup = BeautifulSoup(response, "html.parser")
>>> print(soup.title.get_text())
Афиша Харьковского академического русского драматического театра Пушкина