Раз уж сегодня тут тема была по php, то мои ламерские вопросы про парсинг будут не так выделяться на общем фоне =)
Парсингом никогда не занимался. В программировании тоже не профи, как увидите ниже) Решил восполнить этот пробел. Потренироваться решил на форуме djbook.ru ;) Идея такая: спарсить любую страницу с форума, оттуда выдрать ник и сообщение, всё это сложить в .csv файл в видео ник:ник, сообщение:сообщение.
Погуглил. Нашёл много различных библиотек для парсинга Grab, Beautiful Soup и т.д. В итоге остановился на библиотеке requests и lxml. Было бы круто, если кто-то написал похожий код на других библиотеках ;)
Вот, что у меня недополучилось:
import requests
import csv
from lxml import html
siteurl = '/forum/topic/3130/'
response = requests.get(siteurl)
parsed_body = html.fromstring(response.text)
На этом моменте мы уже получается спарсили страницу. Осталось выдрать нужное нам и сохранить в .csv
А вот дальше у меня немного затык. Дальше код будет что-то вроде такого:
nick = parsed_body.xpath('//nick/text()')
Не совсем понимаю, как правильно прописать здесь
title = parsed_body.xpath('//nick/text()')
поиск ника. И вообще по идее, нужно использовать цикл for, т.к. этих ников будет несколько на страницу. Тоже самое и для сообщений.
Потом это всё сохраним в файл .csv
У меня получилась конструкция что-то вроде такого:
with open('nick-message.csv', 'w') as csvfile:
fieldnames = ['Nick', 'Message']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'Nick': 'Nick', 'Message': 'Message'})
Но она не правильная для нашего примера. Ведь нужно вставлять данные ников и сообщений из наших значений. Да и скорее всего, тут опять нужно как-то через цикл for это делать. Был бы рад, если кто-то разъяснил, как это правильно делается)
Updated 19 April 2015, 21:59 by Reboot.