@activebomb

Что делать если парсится только одна ссылка?

import requests
from bs4 import BeautifulSoup as bs

headers = {'accept': '*/*',
           'user-agent': 'Mozilla/5.0(X11;Linux x86_64...)Geco/20100101 Firefox/60.0'}
base_url = 'https://www.rosfirm.ru/oblitsovochnye-materialy-i-dekor-1016?rubrik_id=1245&other_countries=1&comp_place%3Alist=316&search=1&show_list=1&field_phone=&field_director=&filter_page=catalog&full_filter_search=1 -'

def bf_parse(base_url, headers):
    session = requests.session()
    request = session.get(base_url, headers=headers)
    soup = bs(request.content, 'html.parser')
    for d in soup.find_all('div', {'class': 'numeration'}):
        link = d.find('a')
        company_link = link.get_all
        print("https://www.rosfirm.ru"+company_link)
bf_parse(base_url, headers)


Парсится только одна ссылка (по, какой-то непонятной мне причине), если же например поменять "место" откуда парсить ссылки, то парсятся все ссылки.
  • Вопрос задан
  • 177 просмотров
Пригласить эксперта
Ответы на вопрос 1
P.S Ты уже надел с глупыми вопросами, ты где парсингу учился? Если сам, то кинь в комент как с тобой связаться, скину тебе хороший курс по парсингу на python. После его прохождения таких вопросов у тебя не останется.

Ну во первых, лучше использовать 'lxml', вместо 'html.parser'(он быстрее), устанавливается через pip.
Во вторых, когда ищешь по классу можно писать так:
find_all('div', class_='numeration')

Ну и в третьих ты делаешь неправильно, нужно сначала найти 'div', он один, а потом уже в нём искать все 'a':
for d in soup.find('div', class_='numeration').find_all('a'):

А ты делаешь так, но div с таким классом один.
soup.find_all('div', {'class': 'numeration'})


Вся функция целиком должна выглядеть так:
def bf_parse(base_url, headers):
    session = requests.session()
    request = session.get(base_url, headers=headers)
    soup = bs(request.content, 'lxml')
    for d in soup.find('div', class_='numeration').find_all('a'):
        link = d.get('href')
        print("https://www.rosfirm.ru"+link)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы