Ich lehre mich selbst Python und kam mit dem Aufbau einer einfachen Web-Crawler-Engine. Die Codes sind unten,Einfacher Web-Crawler in Python
def find_next_url(page):
start_of_url_line = page.find('<a href')
if start_of_url_line == -1:
return None, 0
else:
start_of_url = page.find('"http', start_of_url_line)
if start_of_url == -1:
return None, 0
else:
end_of_url = page.find('"', start_of_url + 1)
one_url = page[start_of_url + 1 : end_of_url]
return one_url, end_of_url
def get_all_url(page):
p = []
while True:
url, end_pos = find_next_url(page)
if url:
p.append(url)
page = page[end_pos + 1 : ]
else:
break
return p
def union(a, b):
for e in b:
if e not in a:
a.append(e)
return a
def webcrawl(seed):
tocrawl = [seed]
crawled = []
while True:
page = tocrawl.pop()
if page not in crawled:
import urllib.request
intpage = urllib.request.urlopen(page).read()
openpage = str(intpage)
union(tocrawl, get_all_url(openpage))
crawled.append(page)
return crawled
Allerdings bekomme ich immer HTTP 403 Fehler.
403 Mittel [** Verbotene **] (https://en.wikipedia.org/wiki/HTTP_403) - ohne zu wissen, auf welche URL (n) Sie zugreifen möchten, ist es schwer zu sagen, ob dies ein * gewünschtes * Verhalten ist. –
was ich versuche zu erreichen, ist zu sehen, ob der Code einige URL von einer Seite holen kann und dann in jede einzelne URL gehen und mehr URLs innerhalb der früher gefundenen Liste von URLs holen kann.Ich werde das wahrscheinlich erreichen, wenn ich eine einfache Webseite mit einigen HTTP-Hyperlinks habe, die mir dann weitere URLs geben und dort aufhören werden. Ich habe es mit https://xkcd.com/353/ versucht. – Sayan