Python XML 解析和 getElementsByTagName

2023-12-08

我试图解析以下 xml 并围绕我的业务需求获取我感兴趣的特定标签。我想我做错了什么。不知道如何解析我所需的标签?想要利用 pandas,以便我可以进一步过滤细节。学弟学妹们多多支持

我的 XML 来自 URI

<couponfeed>
 <TotalMatches>1459</TotalMatches>
 <TotalPages>3</TotalPages>
 <PageNumberRequested>1</PageNumberRequested>
 <link type="TEXT">
  <categories>
   <category id="1">Apparel</category>
  </categories>
  <promotiontypes>
    <promotiontype id="11">Percentage off</promotiontype>
   </promotiontypes>
   <offerdescription>25% Off Boys Quiksilver Apparel. Shop now at Macys.com! Valid 7/23 through 7/25!</offerdescription>
   <offerstartdate>2020-07-24</offerstartdate>
   <offerenddate>2020-07-26</offerenddate>
   <clickurl>https://click.synergy.com/fs-bin/click?id=Z&offerid=777210.100474694&type=3&subid=0</clickurl>
    <impressionpixel>https://ad.synergy.com/fs-bin/show?id=ZNAweM&bids=777210.100474694&type=3&subid=0</impressionpixel>
    <advertiserid>3184</advertiserid>
    <advertisername>cys.com</advertisername>
    <network id="1">US Network</network>
  </link>
 <link type="TEXT">
  <categories>
   <category id="1">Apparel</category>
  </categories>
  <promotiontypes>
   <promotiontype id="11">Percentage off</promotiontype>
  </promotiontypes>
  <offerdescription>25% Off Boys' Quiksilver Apparel. Shop now at Macys.com! Valid 7/23 through 7/25!</offerdescription>
  <offerstartdate>2020-07-24</offerstartdate>
  <offerenddate>2020-07-26</offerenddate>
  <clickurl>https://click.synergy.com/fs-bin/click?id=ZZvk49eM&offerid=777210.100474695&type=3&subid=0</clickurl>
  <impressionpixel>https://ad.synergy.com/fs-bin/show?id=ZZvk49NAwbids=777210.100474695&type=3&subid=0</impressionpixel>
  <advertiserid>3184</advertiserid>
  <advertisername>cys.com</advertisername>
  <network id="1">US Network</network>
 </link>

My Code

from xml.dom import minidom
import urllib
import pandas as pd 
url = "http://couponfeed.synergy.com/coupon?token=xxxxxxxxx122b&network=1&resultsperpage=500"
xmldoc = minidom.parse(urllib.request.urlopen(url)) 

#itemlist = xmldoc.getElementsByTagName('clickurl')


df_cols = ["promotiontype","category","offerdescription", "offerstartdate", "offerenddate", "clickurl","impressionpixel","advertisername","network"]
rows = []

for entry in xmldoc.couponfeed:
    s_promotiontype = couponfeed.get("promotiontype","")
    s_category = couponfeed.get("category","")
    s_offerdescription = couponfeed.get("offerdescription", "")
    s_offerstartdate = couponfeed.get("offerstartdate", "")
    s_offerenddate = couponfeed.get("offerenddate", "")
    s_clickurl = couponfeed.get("clickurl", "")
    s_impressionpixel = couponfeed.get("impressionpixel", "")
    s_advertisername = couponfeed.get("advertisername","")
    s_network = couponfeed.get ("network","")
       
        
    rows.append({"promotiontype":s_promotiontype, "category": s_category, "offerdescription": s_offerdescription, 
                 "offerstartdate": s_offerstartdate, "offerenddate": s_offerenddate,"clickurl": s_clickurl,"impressionpixel":s_impressionpixel,
                 "advertisername": s_advertisername,"network": s_network})

out_df = pd.DataFrame(rows, columns=df_cols)


out_df.to_csv(r"C:\\Users\rai\Downloads\\merchants_offers_share.csv", index=False)

尝试简单的方法但我没有得到任何结果

import lxml.etree as ET 
import urllib

response = urllib.request.urlopen('http://couponfeed.synergy.com/coupon?token=xxxxxd39f4e5fe392a25538bb122b&network=1&resultsperpage=500')
xml = response.read()

root = ET.fromstring(xml)

for item in root.findall('.//item'):
    title = item.find('category').text
    print (title)

另一次尝试

from lxml import etree
import pandas as pd 
import urllib

    url = "http://couponfeed.synergy.com/coupon?token=xxxxxxd39f4e5fe392a25538bb122b&network=1&resultsperpage=500"
    xtree = etree.parse(urllib.request.urlopen(url)) 
    
    for value in xtree.xpath("/root/couponfeed/categories"):
        print(value.text)

另一种方法。

from simplified_scrapy import SimplifiedDoc, utils, req
# html = req.get('http://couponfeed.synergy.com/coupon?token=xxxxxxxxx122b&network=1&resultsperpage=500')
html = '''
<couponfeed>
 <TotalMatches>1459</TotalMatches>
 <TotalPages>3</TotalPages>
 <PageNumberRequested>1</PageNumberRequested>
 <link type="TEXT">
  <categories>
   <category id="1">Apparel</category>
  </categories>
  <promotiontypes>
    <promotiontype id="11">Percentage off</promotiontype>
   </promotiontypes>
   <offerdescription>25% Off Boys Quiksilver Apparel. Shop now at Macys.com! Valid 7/23 through 7/25!</offerdescription>
   <offerstartdate>2020-07-24</offerstartdate>
   <offerenddate>2020-07-26</offerenddate>
   <clickurl>https://click.synergy.com/fs-bin/click?id=Z&offerid=777210.100474694&type=3&subid=0</clickurl>
    <impressionpixel>https://ad.synergy.com/fs-bin/show?id=ZNAweM&bids=777210.100474694&type=3&subid=0</impressionpixel>
    <advertiserid>3184</advertiserid>
    <advertisername>cys.com</advertisername>
    <network id="1">US Network</network>
  </link>
 </couponfeed>
'''
doc = SimplifiedDoc(html)
df_cols = [
    "promotiontype", "category", "offerdescription", "offerstartdate",
    "offerenddate", "clickurl", "impressionpixel", "advertisername", "network"
]
rows = [df_cols]

links = doc.couponfeed.links  # Get all links
for link in links:
    row = []
    for col in df_cols:
        row.append(link.select(col).text)  # Get col text
    rows.append(row)

utils.save2csv('merchants_offers_share.csv', rows)  # Save to csv file

Result:

promotiontype,category,offerdescription,offerstartdate,offerenddate,clickurl,impressionpixel,advertisername,network
Percentage off,Apparel,25% Off Boys Quiksilver Apparel. Shop now at Macys.com! Valid 7/23 through 7/25!,2020-07-24,2020-07-26,https://click.synergy.com/fs-bin/click?id=Z&offerid=777210.100474694&type=3&subid=0,https://ad.synergy.com/fs-bin/show?id=ZNAweM&bids=777210.100474694&type=3&subid=0,cys.com,US Network

以下是更多示例:https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

删除最后一个空行

import io
with io.open('merchants_offers_share.csv', "rb+") as f:
    f.seek(-1,2)
    l = f.read()
    if l == b"\n":
        f.seek(-2,2)
        f.truncate()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python XML 解析和 getElementsByTagName 的相关文章

随机推荐

  • 如何通知父视图控制器模态视图控制器中更改的屏幕方向?

    我在纵向模式下在 UISplitViewController 上方呈现一个模式视图控制器 现在 我将 iPad 旋转到横向模式并关闭模态视图控制器 UISplitViewController 似乎没有收到有关方向更改的通知 分割视图控制器的
  • caret 包中的 createGrid 函数 - 它被删除了吗?

    我在用着caretR 版本 3 0 2 中的包 版本 6 0 24 功能createGrid实际上被删除了 在caret版本 5 17 7 保留该功能 功能创建网格已从版本 6 0 24 中删除 http cran r project or
  • 在 Kubernetes cron 作业中运行的应用程序无法连接到同一 Kubernetes 集群中的数据库

    我有一个 Kubernetes 集群 运行 PostgreSQL 数据库 Grafana 仪表板和一个在 Kubernetes 内每小时运行的 Python 单运行应用程序 构建为 Docker 映像 CronJob 见下面的清单 此外 这
  • 如何检查字符串是否包含字母表中的任何字母?

    检查字符串是否包含字母表中的任何字母的最佳纯 Python 实现是什么 string 1 555 555 5555 string 2 555 555 5555 ext 5555 Where string 1会回来False因为其中没有字母表
  • 循环分割大数据帧并在 R 中写入多个 CSV 文件 [重复]

    这个问题在这里已经有答案了 我有一个包含 2500 万行的文件 需要根据因子级别将其拆分为更小的文件 我创建了一个数据框来包含不同的因子级别 并编写了一个循环来执行一些操作并写出一个csv 数据看起来像这样 Country Col2 Cod
  • 在 WinForms 线程上使用 CoInitializeEx

    我正在为 DSLR 相机开发一个 SDK 其中包含以下说明 开发Windows应用程序的注意事项 创建应用程序时 在 Windows 下运行的每个程序都需要 COM 初始化 线程以便从主线程以外的线程访问相机 线 创建用户线程并从中访问相机
  • 两个或多个带进度的前台通知在更新其进度时相互替换

    我有一项服务将在前台运行上传任务 然后在通知中显示进度 由于用户可能会使用不同的 id 请求多次上传 因此将运行两个或多个前台服务 一切正常 但我想要的是使用此代码显示所有任务的通知和进度 NotificationCompat Builde
  • 使用关联实体的正确方法是什么?

    这是描述 绘制 Poke Hospital 的实体关系图 其中提供 为神奇宝贝提供医疗服务 每个神奇宝贝都会与其中一位护士乔伊有个约会 在 除了记录每个神奇宝贝的名称 类型和训练师之外 系统需要跟踪多种类型的疾病 诊断为神奇宝贝 在预约期间
  • 是否可以避免实现文件中重复类名?

    有没有办法避免Graph 在实现文件中重复 但仍然将类拆分为标头 实现 如 头文件 ifndef Graph H define Graph H class Graph public Graph int n void printGraph v
  • 谷歌云端硬盘托管 URL 发生变化

    我开发了一个网络应用程序 使用谷歌驱动器作为托管平台 如下所述 https support google com drive answer 2881970 hl en 当用户访问时 应用程序一直运行正常 但昨天它开始将该地址重定向到 b21
  • 如何获取两个地点之间的行驶距离?

    我在我的应用程序中使用 GoogleMapv2 api 我想绘制一条从源到目的地的多边形线 并在地图活动上显示旅行时间和距离 但我无法找到它 请帮我 我的代码片段在这里 public class NavigationActivity ext
  • 为什么新的网络版 Dropbox 可以在不刷新页面的情况下更改 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在不离开页面的情况下更改浏览器中显示的 URL 如何像 GitHub 一样进行出色的无刷新页面更改 更改浏览器 URL 和页面内容 无需重新加载且无需使用片段 太神奇了 新的 Dropbox 网页
  • Win32 和 Win64 机器中的 SendInput 按键

    我在 xp 32 位下使用 sendInput 使用 web 服务来推送当前焦点窗口的 F 5 现在在 Vista win64 下我无法获得这个结果 有些文章指出使用 4 位或 8 位的 uint 问题 但这并不能通过差异编译和 Field
  • 求二叉树的直径

    我试图在java中找到二叉树的直径 包含最大节点数的树中任意两个节点之间的路径长度 我的代码片段 public int diametre Node node int d if node null return 0 lh diametre n
  • 使用正确的 pack:// URI 格式

    我有一个 WPF 类库 其中包含一个包含图像的文件夹 图像 在 WPF 应用程序中 我不会使用以下方式引用该文件夹中的图像
  • 在哪里可以找到要添加为参考的 Microsoft.VisualStudio.ExtensionManager?

    我想在使用 VS2013 SDK 安装的 VS2013 中的控制台应用程序上添加以下引用 Microsoft VisualStudio ExtensionManager Microsoft VisualStudio ExtensionMan
  • Xcode 6.1 文件中缺少所需的架构 X86_64

    在 Xcode 6 1 中 我收到 iPhone 6 iPhone 5s iOS 7 1 的错误 其中显示 Undefined symbols for architecture x86 64 OBJC CLASS ClientAuthent
  • 如何在画布上制作弹跳球的动画

    你好 我刚刚开始编写 Java 和 HTML 等代码 所以有时我会遇到困难 因此 我加入 StackOverflow 寻求您的帮助 请对我好一点 我正在尝试使用动画setInterval 并绘制方法来创建一个弹跳球 该球在每帧中移动多个像素
  • OPENCV waitKey()方法返回类型

    我正在尝试使用在线教程学习 OPENCV 用于图像处理项目 opencv 文档说 waitKey 返回一个 int 这应该是按下的键的 ASCII 值 但大多数在线教程都使用以下代码 可以正常编译和运行 if char 27 waitKey
  • Python XML 解析和 getElementsByTagName

    我试图解析以下 xml 并围绕我的业务需求获取我感兴趣的特定标签 我想我做错了什么 不知道如何解析我所需的标签 想要利用 pandas 以便我可以进一步过滤细节 学弟学妹们多多支持 我的 XML 来自 URI