2bicz

Web scraper RSS

Mar 27th, 2022 (edited)
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.69 KB | None | 0 0
  1. #web scraper RSS
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import pandas as pd
  5.  
  6.  
  7. def get_website(url):
  8.     article_list = []
  9.     try:
  10.         r = requests.get(url)
  11.         print(f'Udało się nawiązać połączenie: {r.status_code}')
  12.         soup = BeautifulSoup(r.content, features='xml')
  13.         articles = soup.findAll('li', class_='news')
  14.         for art in articles:
  15.             title = art.find('h3', class_='title').text.replace('\n', '')
  16.             title = title.replace('\t', '')
  17.             link = art.find('div', class_='read-more')
  18.             link = link.find('a')
  19.             link = link.get('href').rsplit('/', 1)[1]
  20.             link = url + '/' + link
  21.             date = art.find('p', class_='date').text.replace('\n', ' ')
  22.             date = date.lstrip()
  23.             date = date.rstrip()
  24.             desc = art.find('div', class_='desc').text.replace('\n', '')
  25.             desc = desc.replace('\t', '')
  26.             desc = desc.rsplit('.', 1)[0] + '.'
  27.             article = {
  28.                 'title': title,
  29.                 'description': desc,
  30.                 'link': link,
  31.                 'date': date
  32.             }
  33.             article_list.append(article)
  34.         print(article_list)
  35.         return save_rss(article_list)
  36.     except Exception as e:
  37.         print(f'Nie udało się nawiązać połączenia. Zobacz co poszło nie tak: {e}')
  38.  
  39.  
  40. def save_rss(article_list):
  41.     df = pd.DataFrame(article_list, columns=['title', 'description', 'link', 'date'])
  42.     df.head()
  43.     return df.to_xml('RSS_data.xml', index=False, encoding='utf-8')
  44.  
  45.  
  46. url = 'https://uke.gov.pl/blog'
  47. print(f'Nawiązuję połączenie z {url.rsplit("//", 1)[1]}...')
  48. get_website(url)
  49.  
Add Comment
Please, Sign In to add comment