Python-Mechanize - Antrag verbietet robots.txt auch nach set_handle_robots und add_headers
Ich habe ein web-crawler, die bekommt alle links, bis die 1. Ebene der Seite und von Ihnen bekommt es jeder link und text 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).)*$')):
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 Super, bis mein crawler erreicht facebook links
die 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 jetzt nicht, warum, weil, wie Sie sehen können, habe ich setted mechanisieren set_handle_robots
und add_headers
Optionen.
Ich weiß nicht warum, aber mir ist aufgefallen, dass ich bekomme, dass Fehler für facebook
links, in diesem Fall facebook.com/sparkbrowser
und google.
Jede Hilfe, jeder Ratschlag ist willkommen.
cheers
- mögliche Duplikate von Warum ist mechanisieren werfen einen HTTP 403-Fehler?
- Ich habe versucht, ändern Header
('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'),('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'),('Accept-Encoding', 'none'),('Accept-Language', 'en-US,en;q=0.8'),('Connection', 'keep-alive')
Aber ich habe den gleichen Fehler - Nein... Das könnte ein Problem sein... wie einrichten?
- siehe die Frage, die ich geknüpft, dass code verwendet mechanisieren, und die cookies zurück
- ja, die cookielib + Einstellung cookies auf mechanize hat mir geholfen,... bitte Schreibe eine Antwort, so konnte ich Punkte :)... Danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, also das gleiche problem erschien in dieser Frage:
Warum ist mechanisieren werfen ein HTTP-Fehler 403?
Indem Sie alle request-Header ein normaler browser senden würde, und die Annahme /Rücksendung des cookies sendet der server sollte das Problem beheben.