Настроить таргетинг на ссылку, используя class-name — BS4

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

введите описание изображения здесьЯ хочу получить количество страниц с разбиением на страницы, получив текст из тегов A, содержащихся в блоке разбивки на страницы :

 import bs4
from bs4 import BeautifulSoup
import requests
import pandas
from pandas import DataFrame
import time
from datetime import datetime
import csv

header = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    }

# Get category URL
r = requests.get("https://www.sortlist.fr/s/reseaux-sociaux")
soup = BeautifulSoup(r.content)

for a_tag in soup.find_all('a', class_='s-pb50', href=True):
# The Section containing the pagination contains an A tag with the following class, so it's the parent

  for a_tag in soup.find_all('a', class_='s-underline', href=True):
 # This is where the number is contained

    print(soup.find_all('a', class_='s-underline', href=True))
  

Но тогда код не возвращает никаких значений или сообщения об ошибке! кто-нибудь может помочь? Спасибо!!!

Ссылка такова: https://www.sortlist.fr/s/reseaux-sociaux

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

Ответ №1:

Почему бы просто не a использовать тег с class s-underline без всех этих вложенных циклов?

Например:

 import requests
from bs4 import BeautifulSoup

header = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    }

# Get category URL
soup = BeautifulSoup(requests.get("https://www.sortlist.fr/s/reseaux-sociaux").content, "html.parser")
for anchor in soup.find_all("a", class_="s-underline", href=True):
    print(anchor["href"])
  

Вывод:

 /sitemap
/explore
https://www.sortlist.fr
https://www.sortlist.fr/explore
https://www.sortlist.fr/s/charte-graphique
https://www.sortlist.fr/s/conseil
https://www.sortlist.fr/s/identite-visuelle
https://www.sortlist.fr/s/publicite
https://www.sortlist.fr/s/redaction
https://www.sortlist.fr/s/strategie-digitale
https://www.sortlist.fr/s/webmarketing
https://www.sortlist.fr/s/communication-globale
https://www.sortlist.fr/s/communication-graphique
https://www.sortlist.fr/s/univers-graphique-de-marque
  

Редактировать:
Это sl-link атрибут привязки, поэтому, если вы хотите получить их все, попробуйте это:

 import requests
from bs4 import BeautifulSoup

header = {
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest",
    }

soup = BeautifulSoup(requests.get("https://www.sortlist.fr/s/reseaux-sociaux").content, "html.parser")
for anchor in soup.find_all("a"):
    try:
        print(f"{anchor['sl-link']}")
    except KeyError:
        continue
  

С принтами:

 xx-aHR0cHM6Ly93d3cuc29ydGxpc3QuZnIv
xx-L2hvdy1pdC13b3Jrcy9jbGllbnQ=
xx-L3N0b3JpZXMvY2xpZW50
xx-L2V4cGxvcmU=
xx-L2hvdy1pdC13b3Jrcy9hZ2VuY3k=
xx-L3N0b3JpZXMvYWdlbmN5
xx-L3ByaWNpbmcvYWdlbmN5
xx-L2FwcGx5P3JlZj1uYXZiYXItYXBwbHk=
xx-L2xvZ2lu
xx-L2hvdy1pdC13b3Jrcy9jbGllbnQ=
xx-L3N0b3JpZXMvY2xpZW50
xx-L2V4cGxvcmU=
xx-L2hvdy1pdC13b3Jrcy9hZ2VuY3k=
xx-L3N0b3JpZXMvYWdlbmN5
xx-L3ByaWNpbmcvYWdlbmN5
xx-L2FwcGx5P3JlZj1uYXZiYXItYXBwbHk=
xx-L2xvZ2lu
...
  

Ответ №2:

Тег класса s-pb50 <section> не <a> :

 for a_tag in soup.find('section', class_='s-pb50').find_all('a'):
  

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

1. На самом деле это дает мне больше результатов, чем хотелось. чтобы настроить ее для идентификатора: для a_tag в soup.find(‘section’, id_=’нумерация страниц’).find_all(‘a’): Я что-то пропустил?

2. id_ должно быть id

3. Проблема в том, что продолжает получать значения за пределами раздела, как будто он не распознает, что раздел с идентификатором «Нумерация страниц» является родительским! Пожалуйста, проверьте изображение, которое я загрузил в исходном сообщении.