Python, Mechanize – solicitud rechazada por robots.txt incluso después de set_handle_robots y add_headers

He creado un rastreador web que obtiene todos los enlaces hasta el primer nivel de la página y de ellos obtiene todos los enlaces y el texto más los enlaces de imágenes y alt. Aquí está el código completo:

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).)*$')): 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 

Todo funciona bien hasta que mi rastreador alcanza uno de los facebook links de facebook links que no puede leer, pero me da un error.

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

para la línea 68 que es: page = br.open(sl)

Y ahora no sé por qué, porque como puede ver, he configurado las set_handle_robots mecanizar set_handle_robots y add_headers .

    No sé por qué es eso, pero me di cuenta de que recibo ese error para los enlaces de facebook , en este caso, facebook.com/sparkbrowser y google.

    Cualquier ayuda o consejo es bienvenido.

    aclamaciones

    Ok, entonces el mismo problema apareció en esta pregunta:

    ¿Por qué es mecanizar lanzar un error HTTP 403?

    Al enviar todos los encabezados de solicitud, un navegador normal enviaría, y la aceptación / devolución de las cookies que envía el servidor debería resolver el problema.