0

私のプロジェクトでは、2 つの問題があります。

  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

lxmlXPath を利用するには、最速のモジュールを使用することをお勧めします。

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 に答える