Накидал тут, - интересно стало. Первым делом устанавливаем дополнение для работы с DOM (парсирование HTML и XML):
sudo apt install python-beautifulsoup
Далее выполняем в терминале команду:
gedit $HOME/Парсер.py
В окне редактора вводим такой код:
#!/usr/bin/env python
#coding=utf-8
# подключаемые библиотеки:
from urllib2 import urlopen #работа с сетью
from bs4 import BeautifulSoup #работа с DOM
import argparse #парсирование аргументов из командной строки
# Простейший целевой парсер web-ресурса на языке Python
# Функционал: парсирует ответы ресурса www.lookupbyisbn.com,
# выдергивая Название книги, автора(ов) и год выпуска
# Дополнительно: понимает один URL в виде аргумента командной строки
#Сама функция парсирования:
def pars_by_url(url):
response = urlopen(url) #выполняем запрос на сервер
html = response.read() #читаем полученный ответ
soup = BeautifulSoup(html,"lxml") #по сути, интерпретируем ответ, формируя коллекцию DOM-элементов
OurCell = soup.find_all('li')[4] #находим все теги <li></li> и вытягиваем 4ый элемент полученной коллекции
#текст гиперссылки (она там одна) в данной ячейке - это название книги
Book_name = OurCell.find_all('a')[0]
print "Название книги: ",Book_name.string
#содержимое тега <u></u> в данной ячейке - это авторы
Book_author = OurCell.find_all('u')[0]
print "Автор книги: ",Book_author.string
#содержимое второго по счету тега <i></i> - это год издания
Book_year = OurCell.find_all('i')[1]
print "Год издания:",Book_year.string
#можно все это в одну строку через разделители пустить - так в том же bash удобнее пользовать будет
#print "Название|Автор|Год издания"
#print Book_name.string,"|",Book_author.string,"|",Book_year.string
#Сама программа (разбираем аргументы, и вызываем парсер):
def main():
callWith=argparse.ArgumentParser() #контейнер для приема аргументов из командной строки
callWith.add_argument('--url', help='URL парсируемой страницы') #единственный принимаемый аргумент - URL, куда осуществляется навигация
args=callWith.parse_args() #вытаскиваем аргумент из командной строки
try:
if (args.url == None): #если аргуент не задан. В примере - навигация на строку по-умолчанию
pars_by_url("http://www.lookupbyisbn.com/Search/Book/9781118688922/1")
else: #если аргумент задан. Воспринимаем его за URL и не проверяя, что не правильно, отсылаем в работу
pars_by_url(args.url)
except:
print "Ошибка выполнения"
#вызов главной процедуры
if __name__ == '__main__':
main()
Сохраняем и закрываем. Далее в том же терминале вводим:
python $HOME/Парсер.py
Ответом станет ожидаемое:
Название книги: Essential Guide to Blood Groups
Автор книги: Geoff Daniels, Imelda Bromilow
Год издания: 2013-11-11
Если тот же индекс передать в виде параметра командной строки, то сделать это можно, к примеру, так:
python $HOME/Парсер.py --url="http://www.lookupbyisbn.com/Search/Book/9781118688922/1"
Ответ терминала не изменится. Теперь учитываем:
1. не программировал проверку данных. Совсем никакую. Задайте навигацию на произвольную страницу, где есть все три тега - интересную книгу получите на выходе ))
2. сайт, с которым работаем, достаточно тягомотен. У меня и в браузере-то открывается через раз. Словом, может потребоваться (и вероятно что потребуется) допиливание скрипта до вменяемого состояния в полевых условиях. Но из серии "на коленке для разового применения" - с пивом потянет ))
Примечание: Код писался и тестировался в kubuntu 18.04.1. В иных версиях синтаксис импорта библиотек отличается.