Python 解析XML时出现不匹配的标记错误?

Python 解析XML时出现不匹配的标记错误?,python,xml,parsing,python-3.x,Python,Xml,Parsing,Python 3.x,我正在编写此脚本,从下载HTML文档,并尝试使用以下方法将其解析为XML: with urllib.request.urlopen("http://example.com/") as f: tree = xml.etree.ElementTree.parse(f) 但是,我一直得到一个 PARSEROLL:不匹配的标签< /Cord>错误,假设在第1行,第2781列,所以我手动加载文件(Ctrl + S在我的浏览器上)并检查它,但是这样的位置表示一个字符串中间的位置,甚至不在EOF附近

我正在编写此脚本,从下载HTML文档,并尝试使用以下方法将其解析为XML:

with urllib.request.urlopen("http://example.com/") as f:
    tree = xml.etree.ElementTree.parse(f)

但是,我一直得到一个<代码> PARSEROLL:不匹配的标签< /Cord>错误,假设在第1行,第2781列,所以我手动加载文件(Ctrl + S在我的浏览器上)并检查它,但是这样的位置表示一个字符串中间的位置,甚至不在EOF附近,但是在实际的2781个字符之前有几行,所以这可能会打乱我对确切位置的计算。但是,我尝试下载并实际将响应写入一个文件,以便稍后通过以下方式对其进行解析:

response = urllib.request.urlopen("http://example.com/")
f = open("test.html", "wb")
f.write(response.read())
f.close()
html = open("test.html", "r")
tree = xml.etree.ElementTree.parse(html)
我仍然在同一列中得到相同的
不匹配标记
错误,但这次我打开了下载的html,第2781列附近唯一的内容是:

 根据示例和文档,对于示例URL,此代码段似乎可以正常工作

import urllib.request
import xml.etree.ElementTree as ET

with urllib.request.urlopen('http://boards.4chan.org/wsg/thread/629672/i-just-lost-my-marauder-on-eve-i-need-a-ylyl') as response:
    html = response.read()
    tree = ET.parse(html)
如果您不想在使用ElementTree对响应进行解析之前将其读入变量,这也可以:

with urllib.request.urlopen('http://boards.4chan.org/wsg/thread/629672/i-just-lost-my-marauder-on-eve-i-need-a-ylyl') as response:
        tree = ET.parse(response.read())

您可以使用
bs4
解析此页面。像这样:

import bs4
import urllib


url = 'http://boards.4chan.org/wsg/thread/629672/i-just-lost-my-marauder-on-eve-i-need-a-ylyl'
proxies = {'http': 'http://www-proxy.ericsson.se:8080'}
f = urllib.urlopen(url, proxies=proxies)
info = f.read()
soup = bs4.BeautifulSoup(info)
print soup.a
输出:

<a href="/a/" title="Anime &amp; Manga">a</a>


你可以从这里下载bs4。

如果你能给我们该页面的实际URL,我们可以检查一下我们是否也遇到了同样的问题。另外,使用requests模块而不是urllib。认真地你会很高兴你这么做的。:)好吧,我还在开始学习python的所有内容,所以我不知道这一点,而且,因为我移植的脚本是对4个线程的检查,这里有一个指向(某种)sfw线程的链接:@arielnmz:使用像lxml或BeautifulSoup这样的HTML解析器。XML解析器不够宽容,无法正确处理HTML。是否有内置的解决方案?据我所知,lxml是一个第三方模块……使用第三方模块有什么问题?好吧,我刚刚启动了一个终端,并将其复制粘贴到一个新的python3交互式shell上,它工作得很好,但后来我只更改了一行:我没有将响应“读取”到变量中,而是直接从“响应”中解析出来,问题再次出现在同一条线上,为什么会发生这种情况?另外,我发现Response没有实现缓冲接口(或者类似的东西),这可能是问题所在吗?好的,问题不是我不想使用var,而是我宁愿跳过使用
read()
方法,但是不管怎样,我只是仔细检查了它,实际上您需要
fromstring()
parse()的方法instad
如果您在响应上使用
read()
,但是您是否尝试过将响应直接传递到
parse()
with urllib.request.urlopen("http://example.com/") as f:
    xml.etree.ElementTree.fromstring(f.read())
import urllib.request
import xml.etree.ElementTree as ET

with urllib.request.urlopen('http://boards.4chan.org/wsg/thread/629672/i-just-lost-my-marauder-on-eve-i-need-a-ylyl') as response:
    html = response.read()
    tree = ET.parse(html)
with urllib.request.urlopen('http://boards.4chan.org/wsg/thread/629672/i-just-lost-my-marauder-on-eve-i-need-a-ylyl') as response:
        tree = ET.parse(response.read())
import bs4
import urllib


url = 'http://boards.4chan.org/wsg/thread/629672/i-just-lost-my-marauder-on-eve-i-need-a-ylyl'
proxies = {'http': 'http://www-proxy.ericsson.se:8080'}
f = urllib.urlopen(url, proxies=proxies)
info = f.read()
soup = bs4.BeautifulSoup(info)
print soup.a
<a href="/a/" title="Anime &amp; Manga">a</a>