我正在尝试根据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'])
答案 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的工作方式。尽管如此,这是一个研究,玩耍和学习的好起点。