Я хотел бы получить помощь или помощь по проблеме, которая у меня сейчас есть.Я работаю над небольшим Python-сканером в качестве проекта.В настоящее время импортируются следующие библиотеки:
requests
BeautifulSoup
re
tld
Точная проблема связана с «областью действия» сканера.Я хотел бы передать URL-адрес коду и попросить сканер захватить все теги привязки со страницы, но только те, которые относятся к базовому URL, игнорируя ссылки вне области действия, а также субдомены.
Здесьэто мой текущий код, я ни в коем случае не программист, поэтому прошу прощения за неаккуратный неэффективный код.
import requests
from bs4 import BeautifulSoup
import re
from tld import get_tld, get_fld
#This Grabs the URL
print("Please type in a URL:")
URL = input()
#This strips out everthing leaving only the TLD (Future scope function)
def strip_domain(URL):
global domain_name
domain_name = get_fld(URL)
strip_domain(URL)
#This makes the request, and cleans up the source code
def connection(URL):
r = requests.get(URL)
status = r.status_code
sourcecode = r.text
soup = BeautifulSoup(sourcecode,features="html.parser")
cleanupcode = soup.prettify()
#This Strips the Anchor tags and adds them to the links array
links = []
for link in soup.findAll('a', attrs={'href': re.compile("^http://")}):
links.append(link.get('href'))
#This writes our clean anchor tags to a file
with open('source.txt', 'w') as f:
for item in links:
f.write("%s\n" % item)
connection(URL)
Точная проблема кода связана с разделом "for link in soup.find".Я пытался проанализировать массив для тегов привязки, которые содержат только базовый домен, который является глобальным var "domain_name", так что он записывает только соответствующие ссылки в исходный текстовый файл.
google.com accepted
google.com/file accepted
maps.google.com not written
Есликто-то может помочь мне или указать мне правильное направление, я был бы признателен.Я также думал, что можно было бы написать каждую ссылку на файл source.txt, а затем изменить его после удаления ссылок «вне области видимости», но на самом деле считал, что это выгоднее сделать без необходимости создания дополнительного кода.
Кроме того, я не самый сильный в регулярных выражениях, но вот кто-то, кто мне поможетЭто некоторый код регулярного выражения, чтобы поймать все варианты http, www, https
(^http:\/\/+|www.|https:\/\/)
К этому я собирался добавить
.*{}'.format(domain_name)