Pull to refresh

Comments 14

Я спрашиваю потому, что сам парсю и html и xml для выдергивания данных через регулярки и не понимаю, на кой черт сие парсить отдельным фреймворком.
Вот JSON… его парсинг мне мозг ломает и я просто использую библиотеку.

А суп кроулить по ссылкам умеет?

Вот интересно, какие умники минусят?
Человек в статье описывает фреймворк, который, судя по описанию, умеет делать XPath запросы к HTML-содержимому, а также перемещаться автоматически по ссылкам на другие страницы сайта, чтобы обойти его весь (crawling). okeld предложил альтернативу — библиотеку Beautiful Soup. В этой библиотеке тоже можно делать запросы к HTML-содержиму, только не XPath, а несколько другого вида (на мой взгляд, менее гибкого и менее удобного). Я хотел узнать, умеет ли Beatiful Soup осуществлять какой-либо crawling или там нужно самому закачивать содержимое других страниц по ссылкам.
Я сам ни с Beautiful Soup, ни со Scrapy не работал, я даже не Pyhton-программист. Тем не менее, ответ мне интересен, т.к. заниматься парсингом сайтов мне также приходится (используя другие технологии и инструменты).

Beautiful Soup можно использовать вместо xpath для разбора html/xml. Насколько я могу судить Beatiful Soup не может осуществлять crawling. Данную библиотеку можно использовать совместно со scrapy при необходимости.
В Scrapy используется своя библиотека Parsel для извлечения данных, основанная на lxml и cssselect. Но можно использовать непосредственно lxml или BeautifulSoup.
Для парсинга можно. Можно даже Selenium прикрутить, но мееедленно.
А что насчет JavaScript? Есть ли какое-то общее решение, которое позволит запускать паука, который будет находить все реквесты, которые может послать JavaScript со страницы?
Scrapy как минимум умеет работать с PhantomJS и Splash(self-hosted сервис рендеринга страниц c js)
Мы решили вопрос с JS при помощи Splash (взяли готовый docker) + scrapy-splash.

При записи сразу в БД главное не забывать об особенностях различных реляционных СУБД при конкурентной работе с одной и той же БД, так как возможны блокировки и долгие инсерты, которые будут тормозить асинхронного паука синхронной записью в БД (часто используют синхронные коннекты/сокеты)


Лучше избегать работу с реляционным БД напрямую из паука, а данные писать асинхронно в файл или другое хранилище заточенное для быстрого приема данных, а уже потом отдельно импортировать данные в целевую БД.


Но для простейших вещей можно и сразу в БД что бы было меньше звеньев )

Sign up to leave a comment.

Articles

Change theme settings