0

在我的项目中,我看到了两个问题:

  1. 我收到 8/10 次HTTP Error 503: Service Temporarily Unavailable
  2. 我是否正确地执行重复?

我需要寻找一个名为的类class="torType",然后只获取链接 URL,我有它的工作方式,但我做得对吗?

#import urllib.request
#from bs4 import BeautifulSoup
WebUrl = 'http://kickasstorrents.come.in/tv/'

def RetrieveWebData(MyUrl):
     try:
         opener = urllib.request.build_opener()
         opener.addheaders =[('User-agent','Mozilla/5.0')]
         url = (MyUrl)
         page = opener.open(url).read()
         return page
    except OSError as e:
        print("An error occurred reading the webpage ",e)


def FilterWebData(RawData):
    try:
        soup = BeautifulSoup(RawData)
        TorData = soup.find_all("a", {"class" : "torType"})
        soup = BeautifulSoup(str(TorData))
        for link in soup.find_all('a'):
            RecentTors = link.get('href')
        return RecentTors

    except OSError as e:
        print("An error occurred during filtering",e)


RawPage = RetrieveWebData(WebUrl)
RecentTorrentLinks = FilterWebData(RawPage)


print(RecentTorrentLinks)
4

2 回答 2

2

您看到的 503 错误可能是由于服务器速率限制了您,减少了访问服务器的频率。

循环不正确;直接循环TorData对象。您也可以将搜索限制为仅a具有href属性的那些链接:

soup = BeautifulSoup(RawData)
TorData = soup.find_all("a", {"class" : "torType", 'href': True})
return [link['href'] for link in TorData]
于 2013-11-14T12:32:10.873 回答
0

您收到的间歇性 HTTP 503 错误与给定 URL 上的高负载有关。

您可能想在以下except块中添加它RetrieveWebData()

    if e.code == 503:
        return RetrieveWebData(MyUrl)

当它由于某种原因失败时,该函数将再次递归调用自身,直到它没有收到 HTTP 503 错误。

此外,这一FilterWebData()行是错误的:

        RecentTors = link.get('href')

RecentTors每次迭代都会覆盖变量。你真的想做这样的事情:

    RecentTors = []
    for link in soup.find_all('a'):
        RecentTors += [link.get('href')]
    return RecentTors

我建议您使用最快的lxml模块来利用 XPath:

def FilterWebData(RawData):
    try:
        TorData = []

        for RecentTor in etree.HTML(RawData).xpath("//a[contains(@class, 'torType')]"):
            TorData += [RecentTor.attrib['href']]

        return TorData
    except OSError as e:
        print("An error occurred during filtering",e)

就这样!

于 2013-11-14T12:31:08.990 回答