1

我正在尝试创建一个从 tv catchup 网站获取 html 的程序,然后使用 split 函数将所有 html 数据拆分为频道名称和当前在表中的程序,例如:BBC 1 - '程序名称'。如果有人能提供帮助,我只需要关于我在第一次拆分功能后所做的事情的帮助,我将不胜感激。

import urllib2
import string


proxy = urllib2.ProxyHandler({"http" : "http://c99.cache.e2bn.org:8084"})

opener = urllib2.build_opener(proxy)

urllib2.install_opener(opener)

tvCatchup = urllib2.urlopen('http://www.TVcatchup.com')

html = tvCatchup.read()

firstSplit = html.split('<a class="enabled" href="/watch.html?c=')[1:]
for i in firstSplit:
    print i

secondSplit = html.split ('1" title="BBC One"></a></li><li class="v-type" style="color:#6d6d6d;">')[1:]

for i in secondSplit:
print i
4

3 回答 3

1

我不会拆分输出,而是使用某种 HTML 解析器。美丽的汤是一个不错的选择。

于 2012-12-20T10:30:34.027 回答
0

听起来您想要一个屏幕抓取工具,而不是子字符串 HTML。一个好的屏幕抓取工具是Scrapy,它使用 XPATH 来检索数据。

Scrapy概览页面很有用。它提供了如何从网页中提取数据的完整示例。

于 2012-12-20T10:35:35.060 回答
-1

请不要使用 urllib2。改用请求 https://github.com/kennethreitz/requests

对于 html 解析使用 BeautifulSoup http://www.crummy.com/software/BeautifulSoup/bs4/doc/

注意:似乎此代理已关闭,删除代理设置,它可以工作

import requests
from BeautifulSoup import BeautifulSoup

proxyDict = {"http":"http://c99.cache.e2bn.org:8084"}
r = requests.get("http://www.TVcatchup.com", proxies=proxyDict)

soup = BeautifulSoup(r.text)
tvs = list()

uls = soup.findAll("ul", { "class":"channels2"}
for ul in uls:
   div = ul.find("div")
   if div:
       showid = div.get("showid")
       link = ul.find("a")
       href = link.get("href")
       title = link.get("title")
       tvs.append({"showid":showid, "href":href, "title":title})
print tvs

你会得到这个

[{'showid': u'450263', 'href': u'/watch.html?c=1', 'title': u'BBC One'}, 
{'showid': u'450353', 'href': u'/watch.html?c=2', 'title': u'BBC Two'}, 
{'showid': u'450398', 'href': u'/watch.html?c=3', 'title': u'ITV1'}, 
{'showid': u'450521', 'href': u'/watch.html?c=4', 'title': u'Channel 4'},...
于 2012-12-20T10:30:54.573 回答