Python 3.3,Beautiful Soup 4,503和Reiteration

时间:2013-11-14 11:46:52

标签: python web beautifulsoup

通过我的项目,我发现了两个问题:

  1. 8/10次我收到HTTP Error 503: Service Temporarily Unavailable
  2. 我是否正确执行了重复?
  3. 我需要查找一个名为class="torType"的类,然后只获取链接网址,我有点工作,但我是否正确使用?

    #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)
    

2 个答案:

答案 0 :(得分:1)

您看到的503错误可能是由于服务器速率限制了您,不太频繁地点击服务器。

循环不正确;直接遍历TorData个对象。您可以将搜索范围限制为仅具有a属性的href个链接:

soup = BeautifulSoup(RawData)
TorData = soup.find_all("a", {"class" : "torType", 'href': True})
return [link['href'] for link in TorData]

答案 1 :(得分:0)

您获得的间歇性HTTP 503错误与给定网址的高负载有关。

您可能希望在except的{​​{1}}块中添加该内容:

RetrieveWebData()

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

此外,此 if e.code == 503: return RetrieveWebData(MyUrl) 行错误:

FilterWebData()

每次迭代都会覆盖 RecentTors = link.get('href') 变量。你真的想做那样的事情:

RecentTors

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

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

这就是全部!