Web-Scraping Python. Пустой список

Рейтинг: 0Ответов: 0Опубликовано: 11.04.2023

Написал простой парсер для скачивания статей с с сайта http://www.mining-portal.ru и их копирования в файл txt. По какой-то причине в файл записывается пустота, т.е. функции get_article_urls и get_article_content возвращают пустой список. Скорее всего, проблема в CSS селекторе -- возможно, я не тот ввел, но я уже несколько раз делал инспект сайта и вроде все было выбрано верно... Пожалуйста, объясните при возможности, что может быть не так.

import requests
from bs4 import BeautifulSoup

def get_article_urls(url):
  article_links = []
  page_number = 1
  base_url = 'http://www.mining-portal.ru'
  url = base_url + '/publish/'

  headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

  while True:
    response = requests.get(url + str(page_number))
    soup = BeautifulSoup(response.text, 'html.parser')
    page_links = [base_url + a['href'] for a in soup.select('.publish-item .publish-title a[href]')]
    
    if not page_links:
        break

    article_links.extend(page_links)
    page_number += 1

return article_links

def get_article_content(url):
  response = requests.get(url)
  soup = BeautifulSoup(response.text, 'html.parser')
  article = soup.select_one('#main-content')
  return article.text.strip()

def save_articles_to_txt(articles, file_name):
  with open(file_name, 'w', encoding='utf-8') as file:
     for url, content in articles.items():
         file.write(f'URL: {url}\n')
         file.write(content)
         file.write('\n\n---\n\n')

def main():
  base_url = 'http://www.mining-portal.ru'
  url = base_url + '/publish/?&p1='

  article_urls = get_article_urls(url)

 articles = {}
 for article_url in article_urls:
     try:
         articles[article_url] = get_article_content(article_url)
         except Exception as e:
         print(f'Error downloading {article_url}: {e}')

     save_articles_to_txt(articles, 'articles_mining.txt')

if __name__ == '__main__':
    main()

Ответы

Ответов пока нет.