Задать вопрос
@UsserBel

Как заставить программу скопировать ссылку на объявление?

Я делаю парсер facebook объявлений, все работает через прокси, в аккаунт входит и тд
Ниже я привел отрезок кода с которым у меня проблемы. В консоль не выводятся ошибки, а пишет: Найдено 0 объявлений (хотя они там есть)

# Запрос на ввод данных для парсинга
print('Доступные варианты поиска: baby_and_kids, clothing_shoes_and_accessories, electronics, furniture, '
      'home_and_garden, vehicles')
category = input('Введите слово для поиска товара (например, electronics): ')
limit = int(input('Введите количество объявлений для парсинга: '))

# Формирование URL для запроса
marketplace_url = f'https://www.facebook.com/marketplace/prague/search/?query={category}'
print("Идет парсинг...")
print(marketplace_url)

try:
  response = requests.get(marketplace_url, cookies=cookie_jar, headers=headers, timeout=10, proxies=proxies)
  if response.status_code == 200:
    print('Успешное подключение к странице с объявлениями')
    html = response.content
    soup = BeautifulSoup(html, 'html.parser')
    count = 0
    links = []
    for link in soup.find_all('a', href=True):
        if link['href'].startswith('https://www.facebook.com/marketplace/item/'):
            links.append(link['href'])
            count += 1
            if count == limit:
                break
    
    print(f"Найдено {len(links)} объявлений")
    for link in links:
        print(link)
        
  else:
    print('Не удалось подключиться к странице с объявлениями')

except requests.exceptions.RequestException:
  print('Не удалось выполнить запрос к Facebook')
  • Вопрос задан
  • 186 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону
попробуй links.__len__()
https://www.techiedelight.com/ru/how-to-get-number...
2. Использование __len__() функция
The len() функция реализована с __len__, который возвращает длину объекта, которая является целым числом, большим, чем равным 0. Хотя это не рекомендуется, его можно вызвать напрямую как:

if __name__ == '__main__':
 
    nums = [1, 2, 3, 4, 5]                  # a list
    print(nums.__len__())                   # печать 5
Ответ написан
trapwalker
@trapwalker
Программист, энтузиаст
Вы в список links ничего не помещаете, поэтому там пусто. Его длина нулевая. Всё правильно.
Это потому что либо soup.find_all('a', href=True) выдает пустой результат, либо
link['href'].startswith('https://www.facebook.com/marketplace/item/')
никогда истиным не бывает.
Добавляте дополнительные отладочные принты и выясняйте что именно идет не так.
Ответ написан
Ваш ответ на вопрос

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

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