Pobieranie linkow z google

0

Witam pisze skrypt dla kumpla ktory jest pozycjonerem potrzebuje on liste wloskich katalogow...

Za pomoca urllib.request cos mi nie szlo naszczesnie znalazlem lepsze rozwiazanie pyGoogle i xgoogle

O ile xgoogle jest nowsza i ciekawiej wyglada to mam maly problem:

import sys
import urlparse
from xgoogle.search import GoogleSearch, SearchError

class Seo:

    def _url_contains(self, links, url):
        for link in links:
            www = urlparse.urlparse(url)
            www_link = urlparse.urlparse(link)
            if www_link[1] == www[1]:
                return True
            return False

    def __init__(self):

        self.links = []

        try:
            google = GoogleSearch("catalogo siti")
            google.page = 0
            google.results_per_page = 50
            key = 0
            while google.page <= 10:
                for link in google.get_results():
                    if not self._url_contains(self.links, link):
                        self.links.append(link.url.encode("utf-8"))
                    key += 1
                google.page += 1
        except SearchError, e:
            print("Wystapil blad: ", e)
        except:
            print(sys.exc_info())

if __name__ == "__main__":
    seo = Seo()
    for nr,url in enumerate(seo.links):
        print "%d. %s" % (nr, url)
 

No i dostaje:

(<type 'exceptions.AttributeError'>, AttributeError("SearchResult instance has no attribute 'find'",), <traceback object at 0x01265238>)

Ogolnie to jest wina metody _url_contains() bo bez niej dzialalo ale dublowalo mi znalezione linki, a chce miec kazdy link jednorazowo...

czy ktos zdola pomoc?

0

A nie możesz self.links zamienić na zbiór

self.links=set()

i zrezygnować z metody _url_contains()?

0
 
import sys
import urlparse
from xgoogle.search import GoogleSearch, SearchError

class Seo:

    def __init__(self):

        self.links = set([])

        try:
            google = GoogleSearch("catalogo siti")
            google.page = 0
            google.results_per_page = 50
            while google.page <= 10:
                for link in google.get_results():
                    www = urlparse.urlparse(link.url.encode("utf-8"))
                    self.links.add(www[1])
                google.page += 1
        except SearchError, e:
            print("Wystapil blad: ", e)
        except:
            print(sys.exc_info())

if __name__ == "__main__":
    seo = Seo()
    for nr,url in enumerate(seo.links):
        print "%d. %s" % (nr, url)

Ok zmiana na zbior pomogla..tylko zastanawiam sie dlaczego nie dubluje wynikow?Czy sama metoda add() sprawdza zbior czy posiada dany element czy jak?bo ja zadnych in ani contains nie wykorzystalem do sprawdzenia tego...

1

Zbiory zazwyczaj posiadają tylko po jednym unikatowym elemencie (bez powtórzeń), tak jak w matematyce.

1 użytkowników online, w tym zalogowanych: 0, gości: 1