Create crawler + downloader
This commit is contained in:
@@ -0,0 +1,64 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
from requests import get
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
from urllib.parse import urlparse, unquote
|
||||||
|
from pywebcopy import save_webpage
|
||||||
|
|
||||||
|
def get_all_links(url, deph, deph_counter=0):
|
||||||
|
all_links = {url}
|
||||||
|
|
||||||
|
if deph_counter < deph:
|
||||||
|
try:
|
||||||
|
req = get(url)
|
||||||
|
soup = BeautifulSoup(req.text, 'html.parser')
|
||||||
|
except:
|
||||||
|
print(f"С сайтом ({url}) какие-то проблемы. Ухожу в сон на 5 секунд...")
|
||||||
|
time.sleep(5)
|
||||||
|
try:
|
||||||
|
req = get(url)
|
||||||
|
soup = BeautifulSoup(req.text, 'html.parser')
|
||||||
|
except:
|
||||||
|
return
|
||||||
|
|
||||||
|
for link in soup.find_all('a'):
|
||||||
|
link = link.get('href')
|
||||||
|
try:
|
||||||
|
if link:
|
||||||
|
if "http" in link:
|
||||||
|
all_links = all_links.union(get_all_links(link, deph, deph_counter+1))
|
||||||
|
elif link == "/":
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
url = urlparse(url).scheme + "://" + urlparse(url).netloc
|
||||||
|
all_links = all_links.union(get_all_links(url+link, deph, deph_counter+1))
|
||||||
|
except:
|
||||||
|
print(link)
|
||||||
|
|
||||||
|
return all_links
|
||||||
|
|
||||||
|
def save_page(url):
|
||||||
|
dir_name = unquote(urlparse(url).netloc + urlparse(url).path)
|
||||||
|
for char in ["\\", "/", ":", "*", "?", "\"", "<", ">", "|"]:
|
||||||
|
dir_name = dir_name.replace(char, "!")
|
||||||
|
|
||||||
|
try:
|
||||||
|
save_webpage(
|
||||||
|
url=url,
|
||||||
|
project_folder="sites/",
|
||||||
|
project_name=str(dir_name),
|
||||||
|
open_in_browser=False,
|
||||||
|
threaded=True
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
print(" ! Не удалось скачать:", dir_name, url)
|
||||||
|
return
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
start_url = "https://habr.com/ru/articles/669766/"
|
||||||
|
|
||||||
|
links = get_all_links(start_url, 0)
|
||||||
|
|
||||||
|
print(len(links))
|
||||||
|
for link in links:
|
||||||
|
save_page(link)
|
||||||
Reference in New Issue
Block a user