Как извлечь заголовок внутри диапазона h5 из ссылки href с помощью BeautifulSoup

#python #web-scraping #beautifulsoup #python-requests #html-parsing

#python #очистка веб-страниц #beautifulsoup #python-запросы #html-синтаксический анализ

Вопрос:

Я пытаюсь извлечь заголовок ссылки с помощью BeautifulSoup. Код, с которым я работаю, выглядит следующим образом:

 import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import pandas as pd

hdr={'User-Agent':'Chrome/84.0.4147.135'}

frame=[]

for page_number in range(19):
    http= "https://www.epa.wa.gov.au/media-statements?page={}".format(page_number 1)

    print('Downloading page %s...' % http)

    url= requests.get(http,headers=hdr)
    soup = BeautifulSoup(url.content, 'html.parser')

    for row in soup.select('.view-content .views-row'):

        content = row.select_one('.views-field-body').get_text(strip=True)
        title = row.text.strip(':')
        link = 'https://www.epa.wa.gov.au'   row.a['href']
        date = row.select_one('.date-display-single').get_text(strip=True)

        frame.append({
        'title': title,
        'link': link,
        'date': date,
        'content': content
    })

dfs = pd.DataFrame(frame)
dfs.to_csv('epa_scrapper.csv',index=False,encoding='utf-8-sig')
  

Однако после выполнения приведенного выше кода ничего не отображается. Как я могу извлечь значение, хранящееся внутри атрибута title тега привязки, хранящегося в ссылке?

Кроме того, я просто хочу знать, как я могу добавить «заголовок», «ссылка», «dt», «содержимое» в файл csv.

Заранее большое вам спасибо.

Ответ №1:

Чтобы получить текст ссылки, вы можете использовать селектор "h5 a" . Например:

 import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
import pandas as pd

hdr={'User-Agent':'Chrome/84.0.4147.135'}

frame=[]
for page_number in range(1, 20):
    http= "https://www.epa.wa.gov.au/media-statements?page={}".format(page_number)

    print('Downloading page %s...' % http)

    url= requests.get(http,headers=hdr)
    soup = BeautifulSoup(url.content, 'html.parser')

    for row in soup.select('.view-content .views-row'):

        content = row.select_one('.views-field-body').get_text(strip=True, separator='n')
        title = row.select_one('h5 a').get_text(strip=True)
        link = 'https://www.epa.wa.gov.au'   row.a['href']
        date = row.select_one('.date-display-single').get_text(strip=True)

        frame.append({
            'title': title,
            'link': link,
            'date': date,
            'content': content
        })

dfs = pd.DataFrame(frame)
dfs.to_csv('epa_scrapper.csv',index=False,encoding='utf-8-sig')
  

Создает epa_scrapper.csv (скриншот из LibreOffice):

введите описание изображения здесь

Комментарии:

1. Большое спасибо за ваш ответ. Я совсем новичок в Python, поэтому я немного запутался. Большое вам спасибо!