首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美丽的汤和宽吻,如何正确解析?

美丽的汤和宽吻,如何正确解析?
EN

Stack Overflow用户
提问于 2016-02-05 12:38:44
回答 2查看 758关注 0票数 1

我目前正在尝试从宽吻amazon请求的响应中提取字符串。不想引起俄罗斯黑客攻击我的网络应用程序,我正试着使用这个小小的网页作为指南。之后的漂亮汤

我现在的代码是:

代码语言:javascript
复制
import bottlenose as BN
import lxml
from bs4 import BeautifulSoup

amazon = BN.Amazon('MyAmznID','MyAmznSK','MyAmznAssTag',Region='UK', Parser=BeautifulSoup)
rank = amazon.ItemLookup(ItemId="0198596790",ResponseGroup="SalesRank")

soup = BeautifulSoup(rank)

print rank
print soup.find('SalesRank').string

这是宽吻的当前输出,如下所示:

代码语言:javascript
复制
<?xml version="1.0" ?><html><body><itemlookupresponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"><operationrequest><httpheaders><header name="UserAgent" value="Python-urllib/2.7"></header></httpheaders><requestid>53f15ff4-3588-4e63-af6f-279bddc7c243</requestid><arguments><argument name="AWSAccessKeyId" value="################"></argument><argument name="AssociateTag" value="#########-##"></argument><argument name="ItemId" value="0198596790"></argument><argument name="Operation" value="ItemLookup"></argument><argument name="ResponseGroup" value="SalesRank"></argument><argument name="Service" value="AWSECommerceService"></argument><argument name="Timestamp" value="2016-02-04T11:05:48Z"></argument><argument name="Version" value="2011-08-01"></argument><argument name="Signature" value="################+##################="></argument></arguments><requestprocessingtime>0.0234130000000000</requestprocessingtime></operationrequest><items><request><isvalid>True</isvalid><itemlookuprequest><idtype>ASIN</idtype><itemid>0198596790</itemid><responsegroup>SalesRank</responsegroup><variationpage>All</variationpage></itemlookuprequest></request><item><asin>0198596790</asin><salesrank>124435</salesrank></item></items></itemlookupresponse></body></html>

因此,瓶鼻部分可以工作,但汤部分给出了错误响应:

代码语言:javascript
复制
Traceback (most recent call last):
File "/Users/Fuck/Documents/Amazon/Bottlenose_amzn_prog/test.py", line 12, in <module>
print soup.find(Rank).string
NameError: name 'soup' is not defined

我试图提取'SalesRank‘标签之间的数字,但失败了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-19 12:48:17

代码的角度来看,宽吻Parser选项似乎非常简单,并以一个函数作为参数。

因此,您可以创建一个非常简单的Python函数并将其传递给构造函数,这使您的代码看起来如下所示:

代码语言:javascript
复制
import bottlenose as BN
from bs4 import BeautifulSoup

def parse_xml(text):
    return BeautifulSoup(text, 'xml')

amazon = BN.Amazon(
    AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,
    AWS_ASSOCIATE_TAG,Region='UK', Parser=parse_xml
)
results = amazon.ItemLookup(ItemId="0198596790",ResponseGroup="SalesRank")

print results.find('SalesRank').string

或者您可以使用lambda内联函数代替:

代码语言:javascript
复制
import bottlenose as BN
from bs4 import BeautifulSoup

amazon = BN.Amazon(
    AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_ASSOCIATE_TAG,
    Region='UK', Parser=lambda text: BeautifulSoup(text, 'xml')
)
results = amazon.ItemLookup(ItemId="0198596790",ResponseGroup="SalesRank")

print results.find('SalesRank').string
票数 1
EN

Stack Overflow用户

发布于 2016-02-06 10:35:02

好的,所以我忽略了在宽吻行中指定解析器的选项。相反,只是指定以后使用BeautifulSoup和xml解析。

代码语言:javascript
复制
import bottlenose as BN
import lxml
from bs4 import BeautifulSoup

amazon = BN.Amazon('##############','##############','##########',Region='UK')
rank = amazon.ItemLookup(ItemId="specifiedItemId",ResponseGroup="SalesRank")
soup = BeautifulSoup(rank, "xml")
print " " 
print soup.SalesRank

我是Python的新手用户,所以有时候简单的事情就能让我感觉到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35224490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档