Python: тестируем ссылки, собираем путь неработающих ссылокPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python: тестируем ссылки, собираем путь неработающих ссылок

Сообщение Anonymous »

Я написал скрипт, который собирает все ссылки с моего сайта (внутренние и внешние) и выдает мне неработающие ссылки.

Вот мой код, он работает ну:

Код: Выделить всё

import requests
# from urllib.parse import urljoin
from urlparse import urlparse, urljoin
from bs4 import BeautifulSoup
import sys

# initialize the set of links (unique links)
internal_urls = set()
external_urls = set()
# number of urls visited so far will be stored here
total_urls_visited = 0
total_broken_link = set()
output = 'output.txt'

def is_valid(url):
"""
Checks whether `url` is a valid URL.
"""
parsed = urlparse(url)
return bool(parsed.netloc) and bool(parsed.scheme)
"""
Almost any value is evaluated to True if it has some sort of content.
Every Url should follow a specific format: :///
;?#
Example: http://www.example.com/index?search=src
Here, www.example.com is your netloc, while index is the path,
search is the query parameter, and src is the value being passed along the parameter search.
This will make sure that a proper scheme (protocol, e.g http or https) and domain name exists in the URL.
"""

def get_all_website_links(url):
"""
Returns all URLs that is found on `url` in which it belongs to the same website
"""
# all URLs of `url`, we use python set() cause we don't redondant links
urls = set()
# domain name of the URL without the protocol, to check if the link is internal or external
domain_name = urlparse(url).netloc
#Python library for pulling data out of HTML or XML files
soup = BeautifulSoup(requests.get(url).content, "html.parser")

# print(soup.prettify()) #test if the html of the page is correctly displaying
# print(soup.find_all('a')) #collect all the anchor tag

for a_tag in soup.findAll("a"):
href = a_tag.get("href")
if href == "" or href is None:
# href empty tag
continue
href = urljoin(url, href) #internal urls
#print(internal_urls)
# print('href:' + href)
if not is_valid(href):
# not a valid URL
continue
if href in internal_urls:
# already in the set
continue
if domain_name not in href:
# external link
if href not in external_urls:
# print("External link:" + href)
# print((requests.get(href)).status_code)
is_broken_link(href)
external_urls.add(href)
continue
# print("Internal link:" + href)
# print((requests.get(href)).status_code)
is_broken_link(href)
urls.add(href) #because it is not an external link
internal_urls.add(href) #because it is not an external link
return urls

def is_broken_link(url):
if ((requests.get(url)).status_code) != 200:
#print("This link is broken")
print(url.encode('utf-8'))
total_broken_link.add(url)
return True
else:
#print("This link works well")
return False

def crawl(url, max_urls=80):
"""
Crawls a web page and extracts all links.
You'll find all links in `external_urls` and `internal_urls` global set variables.
params:
max_urls (int): number of max urls to crawl.
"""
global total_urls_visited
total_urls_visited += 1
links = get_all_website_links(url)
for link in links:
if total_urls_visited > max_urls:
break
crawl(link, max_urls=max_urls)

if __name__ == "__main__":
crawl('https://www.example.com/')

print('Total External links:' + str(len(external_urls)))
print('Total Internal links:' + str(len(internal_urls)))
print('Total:' + str(len(external_urls) + len(internal_urls)))
print('Be careful: ' + str(len(total_broken_link)) + ' broken links found !')
Когда я запускаю свой скрипт, он возвращает мне все неработающие ссылки, а также количество неработающих ссылок.

Но я также хочу отобразить путь каждой неработающей ссылки.

Например, если я найду эту неработающую ссылку https://www.example.com/brokenlink (внутренняя неработающая ссылка) или этот https://www.otherwebsite.com/brokenlink (внешняя неработающая ссылка).

Я хочу знать, где называются эти неработающие ссылки. в моем коде я имею в виду, на какой странице нужно решить проблему.
Если я знаю, где находятся эти неработающие ссылки в моем коде, я могу легко найти их и удалить, чтобы больше не возникало этой проблемы.

Поэтому я хочу, чтобы этот скрипт позволял мне отображать каждую неработающую ссылку с указанием ее пути, а затем количества неработающих ссылок.

Надеюсь, это было достаточно ясно!

Подробнее здесь: https://stackoverflow.com/questions/615 ... oken-links
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проверка неработающих ссылок локально на статическом веб-сайте (используя wget?)
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Я получил MalformedURLException с ошибкой протокольного телефона при запуске кода автоматизации для поиска неработающих
    Гость » » в форуме JAVA
    0 Ответы
    24 Просмотры
    Последнее сообщение Гость
  • Собираем образ с помощью make-файла
    Гость » » в форуме Linux
    0 Ответы
    25 Просмотры
    Последнее сообщение Гость
  • Собираем устройства вывода на C#
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • В чем причина неработающих ленивых столбцов/сеток в приложении Jetpack Compose для Android?
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»