Tôi đang cố duyệt qua Google XML để truy xuất khoảng 6 trường. Tôi đang sử dụng gdata do Google cung cấp để lấy nguồn cấp dữ liệu XML cho các hồ sơ người dùng trong Miền Google Apps của tôi. Đây là kết quả:Truy xuất dữ liệu từ trăn XML
<?xml version="1.0"?>
-<ns0:feed ns1:etag="W/"LIESANDCRAPfyt7I2A9WhHERE."" xmlns:ns4="http://www.w3.org/2007/app" xmlns:ns3="http://schemas.google.com/contact/2008" xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:ns1="http://schemas.google.com/g/2005" xmlns:ns0="http://www.w3.org/2005/Atom">
<ns0:updated>2012-01-25T14:52:12.867Z</ns0:updated>
<ns0:category term="http://schemas.google.com/contact/2008#profile" scheme="http://schemas.google.com/g/2005#kind"/>
<ns0:id>domain.com</ns0:id>
<ns0:generator version="1.0" uri="http://www.google.com/m8/feeds">Contacts</ns0:generator>
<ns0:author>
<ns0:name>domain.com</ns0:name>
</ns0:author>
<ns0:link type="text/html" rel="alternate" href="http://www.google.com/"/>
<ns0:link type="application/atom+xml" rel="http://schemas.google.com/g/2005#feed" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full"/>
<ns0:link type="application/atom+xml" rel="http://schemas.google.com/g/2005#batch" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/batch"/>
<ns0:link type="application/atom+xml" rel="self" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full?max-results=300"/>
<ns2:startIndex>1</ns2:startIndex>
<ns2:itemsPerPage>300</ns2:itemsPerPage>
<ns0:entry ns1:etag=""CRAPQR4KTit7I2A4"">
<ns0:category term="http://schemas.google.com/contact/2008#profile" scheme="http://schemas.google.com/g/2005#kind"/>
<ns0:id>http://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson</ns0:id>
<ns1:name>
<ns1:familyName>Person</ns1:familyName>
<ns1:fullName>Name Person</ns1:fullName>
<ns1:givenName>Name</ns1:givenName>
</ns1:name>
<ns0:updated>2012-01-25T14:52:13.081Z</ns0:updated>
<ns1:organization rel="http://schemas.google.com/g/2005#work" primary="true">
<ns1:orgTitle>JobField</ns1:orgTitle>
<ns1:orgDepartment>DepartmentField</ns1:orgDepartment>
<ns1:orgName>CompanyField</ns1:orgName>
</ns1:organization>
<ns3:status indexed="true"/>
<ns0:title>Name Person</ns0:title>
<ns0:link type="image/*" rel="http://schemas.google.com/contacts/2008/rel#photo" href="https://www.google.com/m8/feeds/photos/profile/domain.com/nperson"/>
<ns0:link type="application/atom+xml" rel="self" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson"/>
<ns0:link type="application/atom+xml" rel="edit" href="https://www.google.com/m8/feeds/profiles/domain/domain.com/full/nperson"/>
<ns1:email rel="http://schemas.google.com/g/2005#other" address="[email protected]"/>
<ns1:email rel="http://schemas.google.com/g/2005#other" primary="true" address="[email protected]"/>
<ns4:edited>2012-01-25T14:52:13.081Z</ns4:edited>
</ns0:entry>
<ns0:title>domain.com's Profiles</ns0:title>
</ns0:feed>
Tôi cố gắng để sử dụng lxml để phân tích dữ liệu, nhưng nó không làm việc ra rất tốt, đây là mã của tôi:
import atom
import gdata.auth
import gdata.contacts
import gdata.contacts.client
from lxml import etree
from lxml import objectify
email = '[email protected]'
password = 'password'
domain = 'domain.com'
gd_client = gdata.contacts.client.ContactsClient(domain=domain)
gd_client.ClientLogin(email, password, 'profileFeedAPI')
profiles_feed = gd_client.GetProfilesFeed('https://www.google.com/m8/feeds/profiles/domain/domain.com/full?max-results=300')
def PrintFeed(feed):
for i, entry in enumerate(feed.entry):
print '\n%s %s' % (i+1, entry.title.text)
print(profiles_feed)
PrintFeed(profiles_feed)
profiles_feed2=(str(profiles_feed))
root = objectify.fromstring(profiles_feed2)
print root
print root.tag
print root.text
for e in root.entry():
print e.tag
print e.text
tôi có thể có được điều này để trở lại nguồn cấp dữ liệu và sau đó nhập cảnh, nhưng tôi không thể khám phá xa hơn. ALl tôi cần là dạng văn bản các trường tên trong tên ns1 và trường org trong tổ chức ns1. Tôi là một chút bị mất, vì vậy bất kỳ trợ giúp được đánh giá cao.
Bạn đang gặp phải vấn đề gì, ngoài việc bị "mất một chút"? Ngoài ra, hãy xem xét phân tích cú pháp SAX cho điều này nếu bạn chỉ cần một vài trường. – Marcin
@marcin vấn đề tôi đang phải đối mặt là tôi không thể có được các lĩnh vực tôi cần, và tôi không biết làm thế nào để làm điều đó. – Kevin
Đã bỏ phiếu để mở lại câu hỏi này. Vấn đề cơ bản là bạn không nhận thức được không gian tên. Xem [sử dụng các không gian tên với lxml objectify] (http://lxml.de/objectify.html#namespace-handling), hoặc thực hiện tương tự [using xpath] (http://lxml.de/xpathxslt.html#xpath) –