2015-11-07, 23:23
  #1
Medlem
Alkyonioss avatar
Postade min frga i trden fr nybrjarfrgor tidigare i veckan men d jag inte ftt ngot svar dr skapar jag en trd istllet i hopp om att f svar hr istllet.

--------------------------------------------------------------------------------

Frskte flja denna guide fr att gra en s.k. Web Crawler.

Grejen r bara den att jag har skrivit av koden EXAKT. Jag har ven dpt min fil till EXAKT samma som den som skrev texten.
Jag har sedan lagt filen i C:/Python34, precis som den som skrev texten (med undantag av att frfattaren hade Python32.

Nr jag sedan ska kalla min funktion skriver jag exakt samma sak som frfattaren i Python IDLE, men jag fr lik frbannat felet:

Kod:
Traceback (most recent call list):
    File "<pyshell#2>", line 1, in <module>
        spider("http://www.dreamhost.com", "secure", 200)
NameError: name 'spider' is not defined

Mitt funktionsanrop:
Kod:
spider("http://www.dreamhost.com", "secure", 200)

All kod:
Kod:
from html.parser import HTMLParser
from urllib.request import urlopen
from urllib import parse

class LinkParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        if tag == 'a':
            for (key, value) in attrs:
                if key == 'href':
                    newUrl = parse.urljoin(self.baseUrl, value)
                    self.links = self.links + [newUrl]

    def getLinks(self, url):
        self.links = []
        self.baseUrl = url
        response = urlopen(url)
        if response.getheader('Content-Type') == 'text/html':
            htmlBytes = response.read()
            htmlString = htmlBytes.decode("utf-8")
            self.feed(htmlString)
            return htmlString, self.links
        else:
            return "", []

    def spider(url, word, maxPages):
        pagesToVisit = [url]
        numberVisited = 0
        foundWord = 0
        while numberVisited < maxPages and pagesToVisit != [] and not foundWord:
            numberVisited = numberVisited + 1
            url = numberVisited + 1
            url = pagesToVisit[0]
            pagesToVisit = pagesToVisit[1:]
            try:
                print(numberVisited, "Visiting: ", url)
                parser = LinkParser()
                data, links = parser.getLinks(url)
                if data.find(word)>-1:
                    foundWord = True
                pagesToVisit = pagesToVisit + links
                print("**Success!**")
            except:
                print("**Failed!**")
        if foundWord:
            print("The word", word, "was found at", url)
        else:
            print("Word never found")
Citera
2015-11-08, 11:05
  #2
Medlem
key33s avatar
Du ser ju i ditt felmeddelande vad felet r:
Kod:
NameError: name 'spider' is not defined

Det r en klass du frsker anvnda och spider r en funktion i klassen LinkParser, du behver frst skapa en instans av klassen och sen anropa funktionen.

https://docs.python.org/3/tutorial/classes.html
Citera
2015-11-08, 11:31
  #3
Medlem
Alkyonioss avatar
Citat:
Ursprungligen postat av key33
Du ser ju i ditt felmeddelande vad felet r:
Kod:
NameError: name 'spider' is not defined

Det r en klass du frsker anvnda och spider r en funktion i klassen LinkParser, du behver frst skapa en instans av klassen och sen anropa funktionen.

https://docs.python.org/3/tutorial/classes.html

Kan jag gra det i IDLE?
Citera
2015-11-08, 12:25
  #4
Medlem
key33s avatar
Har inte mjlighet att kra koden s detta kanske inte blir helt rtt.

Du borde bara kunna lgga till koden i samma fil och kra koden, typ
Kod:
class LinkParser(HTMLParser):
  ..
  ..

c = LinkParser()
print(c.spider('http://www.google.se','google',1))
Citera
2015-11-08, 12:36
  #5
Medlem
Alkyonioss avatar
Citat:
Ursprungligen postat av key33
Har inte mjlighet att kra koden s detta kanske inte blir helt rtt.

Du borde bara kunna lgga till koden i samma fil och kra koden, typ
Kod:
class LinkParser(HTMLParser):
  ..
  ..

c = LinkParser()
print(c.spider('http://www.google.se','google',1))

Kod:
Traceback (most recent call last):
  File "C:/Users/x/Dropbox/Python/WebCrawler/source.py", line 54, in <module>
    print(c.spider('http://www.google.se', 'google', 1))
TypeError: spider() takes 3 positional arguments but 4 were given

Process finished with exit code 1

Detta felmeddelandet genereras nu. Hur i helvete fr den det till 4 argument?
Citera
2015-11-08, 12:39
  #6
Medlem
key33s avatar
Citat:
Ursprungligen postat av Alkyonios
Kod:
Traceback (most recent call last):
  File "C:/Users/x/Dropbox/Python/WebCrawler/source.py", line 54, in <module>
    print(c.spider('http://www.google.se', 'google', 1))
TypeError: spider() takes 3 positional arguments but 4 were given

Process finished with exit code 1

Detta felmeddelandet genereras nu. Hur i helvete fr den det till 4 argument?

Testa lgga till self som argument i spider funktionen?
Kod:
def spider(self, url, word, maxPages):
Citera
2015-11-08, 12:52
  #7
Medlem
Alkyonioss avatar
Citat:
Ursprungligen postat av key33
Testa lgga till self som argument i spider funktionen?
Kod:
def spider(self, url, word, maxPages):

Tack, nu funkar det


Edit: Dremot verkar det inte fungera fr ngon annan hemsida n den som skaparen testade med.

Testade att kra med aftonbladet och "start" som nyckelord och det hittade den inte trots att det str verst p frsta sidan
__________________
Senast redigerad av Alkyonios 2015-11-08 kl. 13:00.
Citera
2015-11-09, 13:14
  #8
Medlem
Citat:
Ursprungligen postat av Alkyonios
Tack, nu funkar det


Edit: Dremot verkar det inte fungera fr ngon annan hemsida n den som skaparen testade med.

Testade att kra med aftonbladet och "start" som nyckelord och det hittade den inte trots att det str verst p frsta sidan

Jag vet inte men
Har du definerat ngon user agent? tnkte ifall de blockerar.
Citera
2015-11-09, 22:25
  #9
Medlem
Alkyonioss avatar
Citat:
Ursprungligen postat av greenhat
Jag vet inte men
Har du definerat ngon user agent? tnkte ifall de blockerar.

Ingen aning om vad det r tyvrr
Citera
2015-11-10, 00:00
  #10
Medlem
https://en.wikipedia.org/wiki/User_agent

"The User-Agent string is one of the criteria by which Web crawlers may be excluded from accessing certain parts of a Web site using the Robots Exclusion Standard (robots.txt file)."

Nr du besker en sida s rapporterar du vad du anvnder fr weblsare tex Chrome version x

men default i urllib s sger du jag r ingen weblsare jag r ett pythonscript. och detta brukar strre sidor blockera.
S drfr mste du lgga till i instllningarna att du r en weblsare.
Citera
2015-11-10, 21:00
  #11
Medlem
Alkyonioss avatar
Citat:
Ursprungligen postat av greenhat
https://en.wikipedia.org/wiki/User_agent

"The User-Agent string is one of the criteria by which Web crawlers may be excluded from accessing certain parts of a Web site using the Robots Exclusion Standard (robots.txt file)."

Nr du besker en sida s rapporterar du vad du anvnder fr weblsare tex Chrome version x

men default i urllib s sger du jag r ingen weblsare jag r ett pythonscript. och detta brukar strre sidor blockera.
S drfr mste du lgga till i instllningarna att du r en weblsare.

Tack!
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in