使用BeautifulSoup的xbmc / kodi python废料数据

时间:2016-03-22 19:54:31

标签: python beautifulsoup xbmc

我想编辑一些使用re.compile将数据废弃到BeautifulSoup4的kodi插件,原始代码就像这样

import urllib, urllib2, re, sys, xbmcplugin, xbmcgui
link = read_url(url)
match = re.compile('<a class="frame[^"]*"'
                   ' href="(http://somelink.com/section/[^"]+)" '
                   'title="([^"]+)">.*?<img src="([^"]+)".+?Length:([^<]+)',
                   re.DOTALL).findall(link) 
for url, name, thumbnail, length in match:
addDownLink(name + length, url, 2, thumbnail)

和html

<div id="content">   
  <span class="someclass">
    <span class="sec">
      <a class="frame" href="http://somlink.com/section/name-here" title="name here">
         <img src="http://www.somlink.com/thumb/imgsection/thumbnail.jpg" >
      </a>
    </span>
    <h3 class="title">
        <a href="http://somlink.com/section/name-here">name here</a>
    </h3>
    <span class="details"><span class="length">Length: 99:99</span>      
 </span>
.
.
.
.
.
.
.
.
.
.
.
</div>

现在如何使用url获取name(href)和lenghth以及thumbnailBeautifulSoup4并将其添加到addDownLink(name + length, url, 2, thumbnail) < / p>

1 个答案:

答案 0 :(得分:1)

from bs4 import BeautifulSoup

html = """<div id="content">
  <span class="someclass">
    <span class="sec">
      <a class="frame" href="http://somlink.com/section/name-here" title="name here">
         <img src="http://www.somlink.com/thumb/imgsection/thumbnail.jpg" >
      </a>
    </span>
    <h3 class="title">
        <a href="http://somlink.com/section/name-here">name here</a>
    </h3>
    <span class="details"><span class="length">Length: 99:99</span>
 </span>
</div>
"""

soup = BeautifulSoup(html, "lxml")
sec = soup.find("span", {"class": "someclass"})
# get a tag with frame class
fr = sec.find("a", {"class": "frame"})

# pull img src and href from the a/frame
url, img = fr["href"], fr.find("img")["src"]

# get h3 with title class and extract the text from the anchor
name =  sec.select("h3.title a")[0].text

# "size" is in the span with the details class
size = sec.select("span.details")[0].text.split(None,1)[-1]


print(url, img, name.strip(), size.split(None,1)[1].strip())

这给了你:

('http://somlink.com/section/name-here', 'http://www.somlink.com/thumb/imgsection/thumbnail.jpg', u'name here', u'99:99')

如果您有多个部分,我们只需要 find_all 并将逻辑应用于每个部分:

def secs():
    soup = BeautifulSoup(html, "lxml")
    sections = soup.find_all("span", {"class": "someclass"})
    for sec in sections:
        fr = sec.find("a", {"class": "frame"})
        url, img = fr["href"], fr.find("img")["src"]
        name, size =  sec.select("h3.title a")[0].text, sec.select("span.details")[0].text.split(None,1)[-1]
        yield url, name, img,size

如果您不了解所有课程,但您知道有一个img标签,您可以在该部分调用find:

 sec.find("img")["src"]

同样的逻辑也适用于其他人。