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