Проблема с веб-сканером: IndexError: индекс строки вне диапазона
Я делаю веб-сканер. Я не использую скрап или что-то еще, я пытаюсь, чтобы мой сценарий делал большинство вещей. Я попытался выполнить поиск проблемы, однако я не могу найти ничего, что поможет с ошибкой. Я попытался переключить некоторые переменные, чтобы попытаться сузить проблему. В строке 24 появляется сообщение об ошибке IndexError: строковый индекс выходит за пределы допустимого диапазона. Функции выполняются по первому URL (исходному URL), затем второму и завершаются с ошибкой третьего в исходном массиве. Я потерян, любая помощь будет принята с благодарностью! Обратите внимание, я только печатаю их все для тестирования, в конечном итоге они будут напечатаны в текстовом файле.
import requests
from bs4 import BeautifulSoup
# creating requests from user input
url = raw_input("Please enter a domain to crawl, without the 'http://www' part : ")
def makeRequest(url):
r = requests.get('http://' + url)
# Adding in BS4 for finding a tags in HTML
soup = BeautifulSoup(r.content, 'html.parser')
# Writes a as the link found in the href
output = soup.find_all('a')
return output
def makeFilter(link):
# Creating array for our links
found_link = []
for a in link:
a = a.get('href')
a_string = str(a)
# if statement to filter our links
if a_string[0] == '/': # this is the line with the error
# Realtive Links
found_link.append(a_string)
if 'http://' + url in a_string:
# Links from the same site
found_link.append(a_string)
if 'https://' + url in a_string:
# Links from the same site with SSL
found_link.append(a_string)
if 'http://www.' + url in a_string:
# Links from the same site
found_link.append(a_string)
if 'https://www.' + url in a_string:
# Links from the same site with SSL
found_link.append(a_string)
#else:
# found_link.write(a_string + '\n') # testing only
output = found_link
return output
# Function for removing duplicates
def remove_duplicates(values):
output = []
seen = set()
for value in values:
if value not in seen:
output.append(value)
seen.add(value)
return output
# Run the function with our list in this order -> Makes the request -> Filters the links -> Removes duplicates
def createURLList(values):
requests = makeRequest(values)
new_list = makeFilter(requests)
filtered_list = remove_duplicates(new_list)
return filtered_list
result = createURLList(url)
# print result
# for verifying and crawling resulting pages
for b in result:
sub_directories = createURLList(url + b)
crawler = []
crawler.append(sub_directories)
print crawler
1 ответ
Решение
После a_string = str(a)
попробуйте добавить:
if not a_string:
continue