Разделите изображения по заголовкам h2 с помощью BeautifulSoup - PullRequest
0 голосов
/ 30 марта 2020

Итак, я изучаю, как использовать 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, прекратить добавлять изображения для этой папки" ?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...