- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图从中抓取媒体链接(对于 Kodi 插件)的网站没有太多的类等标记,但每个链接都采用某种独特的布局。
我已经从另一个工作插件创建了基本的 Kodi 插件,但我在使用 Python/BeautifulSoup 抓取链接时遇到了问题。其他插件使用类等 header ,但我试图从中抓取的网站并没有使用太多这种方式。
我尝试过各种论坛,但没有成功,大多数 Kodi 插件论坛都很旧,而且不太活跃。我看过的指南看起来从步骤 1 到步骤 1000 的速度非常快,而且它给出的示例并不相关。我查看了大约 30 个不同的插件,认为应该有所帮助,但我无法解决。
我试图抓取的媒体链接、剧集标题、描述和图像列在 www.thisiscriminal.com/episodes 上。
到目前为止我完成的完整插件位于 Github-repository
我可以在源代码中看到它们被清楚地列出(参见代码)
我基本上只需要能够解析一个网站,找到每一集的以下部分,将它们填充为 kodi 插件页面上的链接,然后在下面列出下一个。任何帮助将不胜感激。我已经连续 3 天尝试这样做,对于我从 2002 年开始攻读的 IT 学位退学,我既感到非常高兴,又感到恼火。
我需要提取的网站代码
(episode image)
<img width="300" height="300" ...
https://thisiscriminal.com/wp-content/uploads/2019/05/Cecilia_art.png" ../>
(episode title)
<h3><a href="https://thisiscriminal.com/episode-115-cecilia-5-24-19/">Cecilia</a></h3>
(episode number)
<h4>Episode #115</h4>
(episode link)
<p><a href="https://dts.podtrac.com/redirect.mp3/dovetail.prxu.org/criminal/a91a9494-fb45-48c5-ad4c-2615bfefd81b/Episode_115_Cecilia_Part_1.mp3"
(episode description)
</header>When Cecilia....</article>
import requests
import re
from bs4 import BeautifulSoup
def get_soup(url):
"""
@param: url of site to be scraped
"""
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
print "type: ", type(soup)
return soup
get_soup("https://thisiscriminal.com/episodes")
def get_playable_podcast(soup):
"""
@param: parsed html page
"""
subjects = []
for content in soup.find_all('a'):
try:
link = content.find('<p><a href="https://dts.podtrac.com/redirect.mp3/dovetail.prxu.org/criminal/')
link = link.get('href')
print "\n\nLink: ", link
title = content.find('<h4>Episode ')
title = title.get_text()
desc = content.find('div', {'class': 'summary'})
desc = desc.get_text()
thumbnail = content.find('img')
thumbnail = thumbnail.get('src')
except AttributeError:
continue
item = {
'url': link,
'title': title,
'desc': desc,
'thumbnail': thumbnail
}
#needto check that item is not null here
subjects.append(item)
return subjects
2019-06-09 00:05:35.719 T:1916360240 错误:窗口 10502 中的控件 55 已被要求聚焦,但它无法聚焦2019-06-09 00:05:41.312 T:1165988576 错误:异常抛出(PythonToCppException):-->Python 回调/脚本返回以下错误<- - 注意:忽略此可能会导致内存泄漏!错误类型:错误内容:“ascii”编解码器无法解码位置 0 中的字节 0xa0:序号不在范围内(128)回溯(最近一次调用最后一次):文件“/home/osmc/.kodi/addons/plugin.audio.abcradionational/addon.py”,第 44 行,位于desc = soup.get_text().replace('\xa0', ' ').replace('\n', ' ')UnicodeDecodeError:“ascii”编解码器无法解码位置 0 中的字节 0xa0:序号不在范围内(128)-->Python脚本错误报告结束<--2019-06-09 00:05:41.636 T:1130349280 错误:GetDirectory - 获取插件时出错://plugin.audio.abcradionational/2019-06-09 00:05:41.636 T:1916360240 错误: CGUIMediaWindow::GetDirectory(plugin://plugin.audio.abcradionational/) 失败
最佳答案
好消息是该页面获取内容的 wp json 源加载,您可以对此发出简单的 xhr 。其他答案似乎很好地涵盖了如何找到它。
然后您可以根据需要从该 json 中解析出信息。文本描述是返回的 json 中的 html,因此您可以将其传递给 bs4 并根据需要进行解析。下面的例子。您可以探索与 Cecilia here 相关的 json 对象,或者,将以下内容粘贴到 json 查看器中:
{'title': 'Cecilia', 'excerpt': {'short': 'When Cecilia Gentili was growing up in Argentina, she felt so different from everyone around her that she thought she might be from another...', 'long': "When Cecilia Gentili was growing up in Argentina, she felt so different from everyone around her that she thought she might be from another planet. “Some of us find our community with our own family and some of us don't.” Sponsors: Article Visit article.com/criminal to get $50 off your...", 'full': "When Cecilia Gentili was growing up in Argentina, she felt so different from everyone around her that she thought she might be from another planet. “Some of us find our community with our own family and some of us don't.” Sponsors: Article Visit article.com/criminal to get $50 off your first purchase..."}, 'content': '<p data-pm-context="[]">When Cecilia Gentili was growing up in Argentina, she felt so different from everyone around her that she thought she might be from another planet. “Some of us find our community with our own family and some of us don’t.”</p>\n<p data-pm-context="[]">Sponsors:</p>\n<p><strong>Article</strong> Visit <a href="http://article.com/criminal">article.com/criminal </a>to get $50 off your first purchase of $100 or more.</p>\n<p><a href="https://www.therealreal.com/"><strong>The Real Real</strong></a> Shop in-store, online, or download the app, and get 20% off select items with the promo code REAL.</p>\n<p><strong>Simplisafe</strong> Protect your home today and get free shipping at <a href="http://SimpliSafe.com/CRIMINAL">SimpliSafe.com/CRIMINAL</a></p>\n<p><strong>Squarespace</strong> Try <a href="http://Squarespace.com/criminal">Squarespace.com/criminal </a>for a free trial and when you’re ready to launch, use the offer code INVISIBLE to save 10% off your first purchase of a website or domain.</p>\n<p><strong>Sun Basket</strong> Go to <a href="http://sunbasket.com/criminal">sunbasket.com/criminal </a>to get up to $80 off today!</p>\n', 'image': {'thumb': 'https://thisiscriminal.com/wp-content/uploads/2019/05/Cecilia_art-150x150.png', 'medium': 'https://thisiscriminal.com/wp-content/uploads/2019/05/Cecilia_art-300x300.png', 'large': 'https://thisiscriminal.com/wp-content/uploads/2019/05/Cecilia_art-1024x1024.png', 'full': 'https://thisiscriminal.com/wp-content/uploads/2019/05/Cecilia_art.png'}, 'episodeNumber': '115', 'audioSource': 'https://dts.podtrac.com/redirect.mp3/dovetail.prxu.org/criminal/a91a9494-fb45-48c5-ad4c-2615bfefd81b/Episode_115_Cecilia_Part_1.mp3', 'musicCredits':"FALSE", 'id': 3129, 'slug': 'episode-115-cecilia-5-24-19', 'date': '2019-05-24 19:43:44', 'permalink': 'https://thisiscriminal.com/episode-115-cecilia-5-24-19/', 'next':"None", 'prev': {'slug': 'episode-114-philip-and-becky', 'title': 'Episode 114: Philip and Becky (5.10.2019)'}}
该请求是一个 queryString url,因此您可以更改要返回的项目数,并且在响应中您将看到列出的页面总数,以便您知道返回所有内容需要多少个请求。
如果你看这里
posts=1000&page=1
您可以看到两个可以相应更改的参数。
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=1000&page=1').json()
for post in r['posts']:
title = post['title']
soup = bs(post['content'])
desc = soup.select_one('p').text # soup.get_text().replace('\xa0', ' ').replace('\n', ' ')
img = post['image']['full']
episode_link = post['audioSource'] #sure this is what you wanted?
episode_number = post['episodeNumber']
关于python - 使用 python/beautiful soup 从网站上抓取链接作为 Kodi 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56486493/
我有这个网站,这个特定页面是安全的,但是当它回发时,它回发到一个不安全的页面。如何解决? 我正在使用 ASP.NET 向导。我有这个页面 - checkout.aspx,页面包含这个控件 checko
我有 2 个 azure 网站 - 两个独立的项目 我现在有 2 个网址: myazurewebsite.azurewebsites.net myazureblog.azurewebsites.net
我有 2 个 azure 网站 - 两个独立的项目 我现在有 2 个网址: myazurewebsite.azurewebsites.net myazureblog.azurewebsites.net
环境: 旧网站: React 托管在 Heroku URL( http://sameurl.com ) 新网站: Java 托管在 Heroku URL ( http://sameurl.com )
我已在 Windows Azure 上注册了一个测试帐户来对其进行测试。我构建了一个 Hello world ASP.NET Web 应用程序 + 数据库只是为了测试。 我安装了 Visual Stu
我有一个可以收集和显示各种测量值的产品(不会详细介绍)。正如人们所期望的那样,显示部分是一个数据库+建立在其之上的网站(使用 Symfony)。 但是,我们可能还会创建一个 API 来向第三方公开数据
这个问题在这里已经有了答案: Software keyboard resizes background image on Android (16 个答案) 关闭 8 年前。 我有一个类似的问题:So
这个问题似乎很常见,但我真的无法根据现有答案解决问题。 我有一个简单的 maven 项目,没有任何复杂的部署配置等,并且想在点击“mvn site”时生成一个 Maven CheckStyle 报告。
有没有人看过有关何时进行横向扩展与纵向扩展的最佳选择的任何分析或信息。什么时候一个比另一个更有意义。 目前,在标准模式和基本模式下,2 个小型实例的费用与 1 个中型实例的费用相同。 拥有 2 个小型
有没有办法找到 azure 网站何时停止? (我通过门户网站停止了网站,但我不记得是什么时候......) 我正在寻找一些日志,但没有找到任何有用的内容。 谢谢。 最佳答案 您拥有的最接近的是 azu
我目前在 Azure VM 的 IIS 中拥有一个网站。我已将该站点复制到 2 个可用区域中的 2 个虚拟机上。 这可以保护网站免遭停机。 我需要为高负载时刻实现一些可扩展性。这似乎就是创建音阶集的目
我有一个托管在 Azure 上的网站 ( http://mike-ward.azurewebsites.net/ )。我从 Azure 门户设置了一个指向(引用?)我的网站的 Azure CDN。根据
我有一个 Azure 网站(不是 Web 角色),有 2 个槽:生产和暂存。 我只想为生产插槽启用 CDN,而不是为登台启用,问题是我找不到识别主机插槽的方法。 RoleEnvironment 不可用
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 4年前关
我们正在考虑将一些网站从 Azure 云服务迁移到 Azure 网站(事情似乎就是这样进行的)。显然,我们被明确告知云服务不会保留文件系统状态,因为它们会在机器故障时重新部署。 我假设网站是基于 Bl
我有一个 Azure 网站,需要使用在 VM 上运行的 Elasticsearch 服务。 虽然我需要能够锁定对 Elasticsearch 的访问,以便只有 Azure 网站可以访问它,但我似乎无法
我有一个 azure 网站,位于 yis3.azurewebsites.net - 我已将其提升为“共享”网站,以便我可以使用自定义域。我拥有从 123-reg.co.uk 购买的域名 yorkshi
我正在使用 abcPDF 动态创建 PDF。 我想保存这些 PDF,以便客户随时检索。最简单的方法(也是我现在在当前服务器上所做的方法)是将完成的 PDF 保存到文件系统。 看来我一直坚持使用 blo
我们正在尝试了解 Windows Azure 管理 API 为 Azure 网站(而非 Webroles)返回的监控数据的复杂性 例如,下图描述了为 CPUTime 检索的数据点。它似乎表明,在晚上
看起来真的很愚蠢,因为我找不到它: 门户网站似乎不太直观,我如何为一个“网站”付费并在其中运行最多 500 个网站?我想当我通过单击左下角的加号添加“网站”时,我添加了整个虚拟机而不是子站点。如何仅添
我是一名优秀的程序员,十分优秀!