Проблема с веб-сканером: 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
Другие вопросы по тегам