Python, Mechanize - Anfrage von robots.txt auch nach set_handle_robots und add_headers nicht erlaubt

Ich habe einen Webcrawler erstellt, der alle Links bis zur ersten Ebene der Seite abruft und von dort alle Links und Texte plus Imagelinks und Alt. Hier ist der ganze Code:

import urllib
import re
import time
from threading import Thread
import MySQLdb
import mechanize
import readability
from bs4 import BeautifulSoup
from readability.readability import Document
import urlparse

url = ["http://sparkbrowser.com"]

i=0

while i<len(url):

    counterArray = [0]

    levelLinks = []
    linkText = ["homepage"]
    levelLinks = []

    def scraper(root,steps):
        urls = [root]
        visited = [root]
        counter = 0
        while counter < steps:
            step_url = scrapeStep(urls)
            urls = []
            for u in step_url:
                if u not in visited:
                    urls.append(u)
                    visited.append(u)
                    counterArray.append(counter +1)
            counter +=1
        levelLinks.append(visited)
        return visited

    def scrapeStep(root):
        result_urls = []
        br = mechanize.Browser()
        br.set_handle_robots(False)
        br.set_handle_equiv(False)
        br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

        for url in root:
            try:
                br.open(url)

                for link in br.links():
                    newurl = urlparse.urljoin(link.base_url, link.url)
                    result_urls.append(newurl)
                    #levelLinks.append(newurl)
            except:
                print "error"
        return result_urls


    scraperOut = scraper(url[i],1)

    for sl,ca in zip(scraperOut,counterArray):
        print "\n\n",sl," Level - ",ca,"\n"

        #Mechanize
        br = mechanize.Browser()
        page = br.open(sl)
        br.set_handle_robots(False)
        br.set_handle_equiv(False)
        br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
        #BeautifulSoup
        htmlcontent = page.read()
        soup = BeautifulSoup(htmlcontent)


        for linkins in br.links(text_regex=re.compile('^((?!IMG).)*

Alles funktioniert großartig, bis mein Crawler einen von ihnen erreichtfacebook links was er nicht lesen kann, aber er gibt mir Fehler

httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

für die Linie 68, die ist:page = br.open(sl)

Und ich weiß jetzt nicht warum, denn wie Sie sehen können, habe ich mich mechanisiertset_handle_robots undadd_headers Optionen.

Ich weiß nicht, warum das so ist, aber mir ist aufgefallen, dass ich diesen Fehler für bekommefacebook Links, in diesem Fallfacebook.com/sparkbrowser und google zu.

Jede Hilfe oder Beratung ist willkommen.

Prost

)): newesturl = urlparse.urljoin(linkins.base_url, linkins.url) linkTxt = linkins.text print newesturl,linkTxt for linkwimg in soup.find_all('a', attrs={'href': re.compile("^http://")}): imgSource = linkwimg.find('img') if linkwimg.find('img',alt=True): imgLink = linkwimg['href'] #imageLinks.append(imgLink) imgAlt = linkwimg.img['alt'] #imageAlt.append(imgAlt) print imgLink,imgAlt elif linkwimg.find('img',alt=False): imgLink = linkwimg['href'] #imageLinks.append(imgLink) imgAlt = ['No Alt'] #imageAlt.append(imgAlt) print imgLink,imgAlt i+=1

Alles funktioniert großartig, bis mein Crawler einen von ihnen erreichtfacebook links was er nicht lesen kann, aber er gibt mir Fehler

httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

für die Linie 68, die ist:page = br.open(sl)

Und ich weiß jetzt nicht warum, denn wie Sie sehen können, habe ich mich mechanisiertset_handle_robots undadd_headers Optionen.

Ich weiß nicht, warum das so ist, aber mir ist aufgefallen, dass ich diesen Fehler für bekommefacebook Links, in diesem Fallfacebook.com/sparkbrowser und google zu.

Jede Hilfe oder Beratung ist willkommen.

Prost

Antworten auf die Frage(1)

Ihre Antwort auf die Frage