【问题标题】:Scraping with Python to Publish on Wordpress (XML-RPC)使用 Python 抓取以在 Wordpress 上发布 (XML-RPC)
【发布时间】:2021-04-19 02:31:16
【问题描述】:

我正在尝试通过抓取公共数据源并在 Python3 中对 HTML/JScript 进行一些清理,然后将其作为页面/帖子发送到 wordpress 博客,从而在 wordpress 上自动更新页面。

似乎总是如此,我喜欢那里的 80%-90%。我的数据清理工作正常进行......这是wordpress的一面,我现在正在碰壁。我被困在两个看起来应该很简单的问题上,但是在寻找了几个小时后,我在关于 XML-RPC 的 wordpress 文档中找不到现成的答案。..

第一个看似简单的问题是我真的只想将更新推送到单个静态页面。我正在尝试使用一些收集统计信息和图表来更新页面。默认情况下,当我推送新页面(或发布,没关系)时,它会在 wordpress 上创建一个具有相同名称和新内容的全新页面,但永久链接不同。我真的希望这不是一个死胡同,因为它会杀死整个项目..

其次,您通过 XML-RPC 传递到 wordpress 的内容似乎只是直接放入帖子中。这最适合我。但是,有一批脚本被刮掉了,看来我需要将该脚本作为 HTML 块传递给 wordpress。我已经通过手动复制和粘贴代码对此进行了测试,并且可以重新创建问题。如果我只是在编辑时将所有 HTML 和脚本放入页面内容中,那么除了脚本生成的图表之外,大部分内容都会显示出来。脚本和图表实际上根本没有出现在页面上(没有垃圾输出或任何东西)。但是,如果我在 wordpress 页面上创建一个“HTML 代码”块并将所有抓取的数据转储到该块中,那么一切都会完美显示..

所以这是让我今晚保持清醒的最后两个症结所在。重复的页面而不是更新的页面,还有几个漂亮的饼图,我只能手动完成这个过程:(

感谢任何想法/帮助。一旦我将其匿名化后,我很乐意分享我的脚本小子级别的 Python 代码,但我认为这两个都是更侧重于 wordpress/XML-RPC 的问题。

编辑: 这是我的代码的 python 到 wordpress 部分,经过清理以删除我的个人信息:


#Configure my wordpress site settings:
your_blog = Client('https://home.XXXXXXXX.com/xmlrpc.php', 'XXXXXXXX', 'XXXXXXXX')

#Get info on existing posts (debugging):
myposts=your_blog.call(posts.GetPosts())
print(myposts)


#Generate a new page:
page = WordPressPage()
page.title = 'Comic Collection Stats'
page.slug='https://home.XXXXXXXX.com/?p=246'
page.content = str(collection_page)
page.id = your_blog.call(posts.NewPost(page))
page.post_status = 'publish'
your_blog.call(posts.EditPost(page.id, page))

编辑2: 在进一步挖掘之后,我将继续使用 Rest API 方法而不是 XML-RPC。无论如何,XML-RPC 似乎已经过时了。在那里也遇到了障碍,但希望这是一个更好的时间汇点,因为它是一个更现代的解决方案。

【问题讨论】:

  • 你用的是哪个python wordpress包(如“python-wordpress-xmlrpc”等)?
  • 如果可能,还请提供执行更新的代码 sn-p 作为进一步讨论的基础。
  • 谢谢,我正在使用 python-wordpress-xmlrpc。我还添加了我的 python 代码的相关部分,经过清理以删除我的信息。

标签: python wordpress xml-rpc


【解决方案1】:

如前所述,我改为使用 Rest API。下面包含用于推送页面并将内容显示在 HTML 块中而不是纯文本内容的工作代码(这解决了我遇到的两个问题之一)。我仍然坚持让它更新一个静态页面,而不是在每次上传时创建一个新页面,但是这个问题是为 XML-RPC 打开的,因为我已经对 Rest 有了更深入的了解,我正在考虑关闭它。

在下面的示例中,“collection_page”是从源网站抓取的数据的 Beautifulsoup。上传时会转成字符串封装在wordpress HTML括号中。

#Rest API Version - Set Site and Auth Details:
url = "https://XXXXXXXXX.com/wp-json/wp/v2/pages/"
user = "XXXXXXXX"
password = "XXXXXXXXX"
credentials = user + ':' + password
token = base64.b64encode(credentials.encode())
header = {'Authorization': 'Basic ' + token.decode('utf-8')}

#Generate Post:
post = {
        'title' : 'Comics Collection',
        'content': '<!-- wp:html -->' + str(collection_page) + '<!-- /wp:html -->',
        'status': 'publish'
}

#Send the new post:
print(blue + "Pushing up the new post:" + green) ##Debugging Message
response = requests.post(url, headers=header, json=post)
print(blue + "Post Sent" + green) ##Debugging Message

#Show response:
print(url)
print(response)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2011-05-21
    • 1970-01-01
    相关资源
    最近更新 更多