XML格式不正确

时间:2018-11-27 13:04:27

标签: python xml web-scraping python-requests

我正在尝试根据get请求从网页中抓取一些数据。不久前,我有一个与此类似的问题,一个用户能够向我展示如何解析XML响应。我继续使用相同的策略,但出现了“格式错误”的错误。我已经在寻找解决方法或解决方案,但是我什么都没找到。任何帮助将不胜感激!

我的代码如下:

导入请求 从xml.etree导入ElementTree作为ET 导入json

base_url =“ https://www.gmeiutility.org/actions/Search/?isPendingValidationChecked=true&isSearchAllLOUChecked=true&keyWord=5493&page=1&resultsPerPage=15&searchType=baseSearch&sortDirection=&sortFieldName=” r = request.get(base_url) 打印(r.content)

root = ET.fromstring(r.content) 数据= json.loads(root.text)

用于数据中的结果['entitySearchResult']:     打印(结果['LEINumber'])

1 个答案:

答案 0 :(得分:0)

跳过root = ET.fromstring(r.content)。没有必要。直接进入“ json.loads”

import requests 
import json

base_url = "https://www.gmeiutility.org/actions/Search/?isPendingValidationChecked=true&isSearchAllLOUChecked=true&keyWord=5493&page=1&resultsPerPage=15&searchType=baseSearch&sortDirection=&sortFieldName=" 
r = requests.get(base_url) 
#print(r.content)

data = json.loads(r.content)

for result in data['entitySearchResult']: 
    print(result['LEINumber'])

我得到了输出:

549300FTQBLOETQK6X43
549300UQLV7M883Z2X56
5493003MO7QE8VJUEP94
549300GKNMWK6EJZWB62
...

编辑:如果有人想扩展/阐明其他内容,请放心。由于我仍在学习中,下面的解释可能并不完全准确(且解释不佳),但我认为这与如何使用requests.get()构造xml有关。

我所做的是,我看着您的r.content,它看起来已经像json一样的结构,所以我想立即尝试json.loads(r.content)

进一步研究它,如果您查看以前发布的问题(如上文所述),则print (r.content)时,您会看到:

b'<?xml version="1.0" encoding="utf-8"?>\r\n<string xmlns="http://tempuri.org/">{"Result":[{"Appl_Number":"20181458","Seq_Num":"28","Inst_Rle_Cde":"1","Appl_Type":"BRANCH","Appl_Recd_YMD":"11/1/2018 12:00:00...

请注意,它以b'<?xml version="1.0" encoding="utf-8"?>\r\n开头,因此在您的第一篇文章中进行root = ET.fromstring(r.content),然后查看root.text,似乎可以将其转换为您的request.get()在这里。

当您在此处执行print (r.content)时,我会看到:

b'{"totalPages":28085,"totalResults":421274,"lastResult":15,"entitySearchResult":[{"isPendingReview":"false","headquartersAddressLineOne":

缺少<?xml version="1.0"...>的原因,所以我认为这就是您收到该错误的原因,因为它在获取<?xml version="1.0"...>时正在寻找root = ET.fromstring(r.content),因此无法将其转换(或实际上,所有人都准备使用json.loads(),而无需先进行转换。

就像我说的那样,我仍然在学习,所以我将对此做更多的研究,以及XML的工作方式。尽管如此,这是一个研究,玩耍和学习的好起点。