Парсер новостей с сайта
Чтобы это заработало, надо установить 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
то ставим из пакета:
Обкатал и проверил 04.10.19 на ВМ django (10.0.4.28)