Итак, я изучаю, как использовать BeautifulSoup, и я хотел попробовать загрузить изображения с веб-страницы, чтобы проверить, могу ли я правильно различать определенные изображения на основе заголовков, к которым они принадлежат. В общем, я очищаю заголовок <h1>
и сохраняю его как подкаталог в родительском каталоге. Затем мой следующий шаг - загрузить каждое изображение в соответствующий подкаталог.
Загрузка изображений не является для меня большой проблемой, я знаю, как это сделать, но моя главная проблема - , как мне это сделать? разделить изображения по заголовку? Имена class
одинаковы, а изображения соответствуют элементам заголовков <h1>
.
Я решил использовать базу данных imfdb.org, так как это легко чтобы увидеть, как изображения будут разделены. Вот мой код вместе со страницей, с которой я работаю: http://www.imfdb.org/wiki/Bad_Lieutenant
Основная функция, с которой я сталкиваюсь, это функция filterWeapons
в нижней части перед main
.
DIR = "./testPath/"
PATH = "http://www.imfdb.org/wiki/Bad_Lieutenant"
wb = Workbook()
mainSheet = wb.add_sheet('MAIN')
helperDict = {}
# This function creates the directory with the specified name (path).
def createFolder(directoryName):
try:
if not os.path.exists(directoryName):
os.makedirs(directoryName)
except OSError:
print("Error creating directory " + directoryName)
def getSource(link):
r = requests.get(link)
if r.status_code == 200:
return bs( r.text, "html.parser" )
else:
sys.exit( "[INFO] Invalid Response Received." )
#helper method
def filter(html, attr):
tag = html.findAll(attr)
if tag:
return tag
else:
sys.exit("[INFO] No attribute of type " + attr + " detected on the page.")
def filterWeapons(html, attr):
tags1 = filter(html, "h2")
for tag in tags1:
children = tag.findChildren(attrs={"class": "mw-headline"})
for child in children:
subFolder = child.get("id") + "/"
createFolder(DIR+subFolder)
# Adds class to workbook if doesn't exist
if helperDict.get(subFolder) == None:
# Writes a new column for the weapon class
mainSheet.write(0, len(helperDict), subFolder.strip('/'))
helperDict[subFolder] = len(helperDict)
def main():
createFolder(DIR)
createFolder(DIR+"all_images/")
html = getSource(PATH)
filterWeapons(html, "h1")
wb.save('./testPath/exampleExcel.xls')
if __name__ == "__main__":
main()
Итак, проблема в filterWeapons
заключается в том, что мне нужно 8 изображений (мне не нужно изображение обложки), и 5 изображений должны быть сохранены в Ruger SP101
, и остальные 3 должны быть сохранены в Smith & Wesson Model 10HB
.
Как бы я это сделал, если бы я еще не знал макет страницы? Например, есть ли ", если следующий элемент одного брата = другой h2, прекратить добавлять изображения для этой папки" ?
Спасибо