Парсер новостей с сайта

Чтобы это заработало, надо установить selenium и phantomjs

pip install selenium
cd /opt
wget [https://bitbucket.org/ariya/phantomjs/downloads/phantomjs\-2.1.1\-linux\-x86\_64.tar.bz2](https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2)
tar xcvfj phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/bin
ln -sf /opt/phantomjs-2.1.1/bin/phantomjs /usr/local/bin
cat news_parser.py

Содержимое файла news_parser.py

import os, sys
from selenium import webdriver
from selenium.webdriver.common.by import By

open('/var/www/rgpu.dataflex.ru/news.txt', 'w').close()

base_url = 'https://www.sample.spb.ru'
page_url = base_url + '/main/'

news_main_content = '/html/body/table/tbody/tr[4]/td/table/tbody/tr/td[3]/table/tbody/tr[2]/td/table'
news_main_content_item = news_main_content + '//div[contains(@class, "news_container")]'

news_main_content_item_cover = '//img'
news_main_content_item_date = '/b'
news_main_content_item_anons = '//p'
news_main_content_item_url = '/a'

driver = webdriver.PhantomJS('/usr/local/bin/phantomjs')
driver.get(page_url)

#print(driver.find_element(By.XPATH, news_main_content_item + news_main_content_item_cover).get_attribute('src'))
#print(driver.find_element(By.XPATH, news_main_content_item + news_main_content_item_date).text)
#print(driver.find_element(By.XPATH, news_main_content_item + news_main_content_item_anons).text)
#print(driver.find_element(By.XPATH, news_main_content_item + news_main_content_item_url).get_attribute('href'))

def news_output():
        i = 2
        while i < 6:
            print('<div class="col-sm-6">')
            print('\t<div class="news__item">')
            print('\t\t<div class="news__img"><img src="' + driver.find_element(By.XPATH, news_main_content_item + '[' + str(i) + ']'  + news_main_content_item_cover).get_attribute('src') + '"></div>')
            print('\t\t<span class="news__date">' + driver.find_element(By.XPATH, news_main_content_item + '[' + str(i) + ']' + news_main_content_item_date).text  + '</span>')
            print('\t\t<p class="news__desc">' + driver.find_element(By.XPATH, news_main_content_item + '[' + str(i) + ']' + news_main_content_item_anons).text + '</p>')
            print('\t\t<a href="' + driver.find_element(By.XPATH, news_main_content_item + '[' + str(i) + ']' + news_main_content_item_url).get_attribute('href') + '" class="btn btn--more btn--news">Подробнее</a>')
            print('\t</div>')
            print('</div>')
            i = i + 1

print(news_output())

driver.quit()

Cкрипт, добавляющий новости, анонсы и события в наш сайт test.ru

#!/bin/sh
export DISPLAY=:0
PATH=$PATH:/usr/local/bin

/usr/bin/python3 /var/www/test.ru/news_parser.py > /var/www/test.ru/news.txt
sed -i '$ d' /var/www/test.ru/news.txt

/usr/bin/python3 /var/www/test.ru/anons_parser.py > /var/www/test.ru/anons.txt
sed -i '$ d' /var/www/test.ru/anons.txt

/usr/bin/python3 /var/www/test.ru/event_parser.py > /var/www/test.ru/event.txt
sed -i '$ d' /var/www/test.ru/event.txt

Дополнения

Можно вместо phantomjs использовать chromedriver

Ставим так:

sudo apt-get install libxi6 libgconf-2-4 libnss3
wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/2.38/chromedriver_linux64.zip
sudo unzip /tmp/chromedriver.zip 
chromedriver -d /usr/local/bin/

Если такое сообщение:

http://selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary

то ставим из пакета:

sudo apt install chromedriver

Обкатал и проверил 04.10.19 на ВМ django (10.0.4.28)