Подсчет количества тэгов HTML через веб-скрейпинг - PullRequest
1 голос
/ 11 ноября 2019

Мой вывод должен быть отдельным общим количеством каждого использованного тега заголовка (теги заголовка «H1» - «H6», используемые на странице), абзацев, изображений и ссылок

Я получаю выводнеправильный номер: он не находит H-теги вообще, а счетчик выводит 1 для тегов заголовка. Как посчитать правильное количество тегов html?

import re
from bs4 import BeautifulSoup
import requests
from collections import Counter
from string import punctuation



#main program



    link_url = input("Please Enter the website address ")
#retrieves url for parsing
    r = requests.get(link_url)

    b_soup = BeautifulSoup(r.content, features="html.parser")

#Searaching/parsing for various sized header content
    headerH1 = headH2 = headerH3 = headerH4 = headerH5 = headerH6 = 0

    for header_tags in b_soup.findAll():

        if(header_tags.name == "H1" or header_tags.name == "<H1>"):

         headerH1 = headerH1+1

    if(header_tags.name == "H2" or header_tags.name == "<H2 >"):

        headH2 = headH2+1

    if(header_tags.name == "H3" or header_tags.name == "<H3 >"):

        headerH3 = headerH3+1

    if(header_tags.name == "H4" or header_tags.name == "<H4 >"):

        headerH4 = headerH4+1

    if(header_tags.name == "H5" or header_tags.name == "<H5 >"):

        headerH5 = headerH5+1

    if(header_tags.name == "H6" or header_tags.name == "<H6 >"):

        headerH6 = headerH6+1

    print("Total Headings in H1: ", headerH1)

    print("Total Headings in H2: ", headH2)

    print("Total Headings in H3: ", headerH3)

    print("Total HeadingS in H4: ", headerH4)

    print("Total Headings in H4: ", headerH5)

    print("Total Headings in H5: ", headerH6)



    count = 0
#counting number of paragraphs
    for header_tags in b_soup.findAll():

        if(header_tags.name == 'p' or header_tags.name == '<p>'):

            count = count+1

    print("Paragraphs: ", count)


#counting image total
    for img in b_soup.findAll():

        if(img.name == 'img'):

            count = count+1

    print("Images: ", count)

    count = 0
#counting number of links
    for link in b_soup.find_all('a', href=True):

        count = count+1

    print("Links: ", count)


мой вывод


Total Headings in H1:  1
Total Headings in H2:  1
Total Headings in H3:  1
Total HeadingS in H4:  1
Total Headings in H4:  1
Total Headings in H5:  1
Paragraphs:  23
Images:  33
Links:  70

Правильный вывод сайта, который я использовал, на самом деле тоже должен быть похожим

Number of H1 Headings: 9

Number of images on this page: 10 

Вам не нужен сайт, который я использую, вы можете использовать любую ссылку для его проверки.

1 Ответ

3 голосов
/ 11 ноября 2019

Вот пример для подсчета количества тегов <h1> из некоторого HTML-кода:

from bs4 import BeautifulSoup
html = "<h1>first</h1><h1>second</h1><h2>third</h2>"
soup = BeautifulSoup(html, 'html.parser')
h1s = soup.find_all('h1')
h1_count = len(h1s) # Gets the number of <h1> tags

В этом примере h1_count будет равно 2.

Вы можете сделатьто же самое для других типов тегов, заменив h1 в find_all('h1'):

h2s = soup.find_all('h2')
h3s = soup.find_all('h3')
...
h2_count = len(h2s)
h3_count = len(h3s)

Надеюсь, это поможет.

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