Получить информацию с веб-страницы (заголовок, картинки, заголовки и т. Д.) - PullRequest
4 голосов
/ 24 января 2011

В Facebook, когда вы добавляете ссылку на свою стену, она получает заголовок, изображения и часть текста. Я видел такое поведение на других сайтах, где вы можете добавить ссылки, как это работает? у него есть имя? Есть ли расширение javascript / jQuery, которое его реализует?

И как это возможно, что Facebook заходит на другой сайт и получает html, когда якобы запрещено совершать межсайтовый вызов ajax ??

Спасибо.

Ответы [ 5 ]

6 голосов
/ 24 января 2011

Основная методология

Когда инициируется событие извлечения (например, при вставке URL-адреса в Facebook), вы можете использовать AJAX для запроса URL-адреса *, а затем проанализировать возвращенные данные, какwish.

Сложный анализ данных - сложная задача, потому что у многих веб-сайтов разные стандарты.Хорошее начало - взять текст между тегами заголовка, а также, возможно, выполнить поиск описания META (но они используются все реже, поскольку поисковые системы превращаются в более сложные поиски на основе контента).

В противном случае,вам нужен какой-то способ найти самый важный текст на странице и взять первые 100 символов или около того, а также найти самую заметную картинку на странице.

Это не тривиальная задача, она чрезвычайно сложнапытаясь извлечь семантику из такого жидкого и контрастирующего набора данных (общая возвращаемая веб-страница).Например, вы можете найти самое большое изображение на странице, это хорошее начало, но откуда вы знаете, что это не фоновое изображение?Откуда вы знаете, что это изображение лучше всего описывает эту страницу?

Удачи!

* Если вы не можете напрямую использовать сторонние URL AJAX, это можно сделать, запросив страницу на вашемлокальный сервер, который извлекает на стороне сервера удаленной страницы какой-то HTTP-запрос.

Некоторые дополнительные мысли

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

Многие заголовки тегов в заголовке будут общими и не описательными, было бы лучше получить заголовок статьи (при условии, что сайт типа статьи), если есть один доступный как онбудет более наглядным, но найти это будет трудно!

Если вы действительно умны, вы можете отодвинуться с Гугомнапример, (проверьте их T & C).Если пользователь запрашивает определенный URL, вы можете выполнить поиск в Google за кулисами и использовать возвращенный описательный текст Google в качестве текста возврата.Если Google значительно изменит свою разметку, хотя это может очень быстро сломаться!

4 голосов
/ 24 января 2011

Вы можете использовать PHP-скрипт на стороне сервера для извлечения содержимого любой веб-страницы (см. Поиск веб-страниц).Что делает Facebook, так это то, что он вызывает вызов PHP-скрипта на стороне сервера через ajax, в котором есть PHP-функция с именем

file_get_contents('http://somesite.com.au'); 

, теперь, когда файл или веб-страница засасываются в ваш серверный скрипт, вы можете затемфильтровать содержимое для чего-либо конкретного.например.Ссылка на получение Facebook будет искать части заголовка, img и meta property = "description файла или веб-страницы с помощью регулярного выражения

, например. PHP's

preg_match(); Function.

Это может быть собрано, а затем возвращено обратно.на свою веб-страницу.

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

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

Также вы можете посмотреть подробнее:

get_meta_tags('http://somesite.com.au');

: -)

3 голосов
/ 12 февраля 2013

Существует несколько API, которые могут предоставить эту функцию, например, PageMunch позволяет передавать URL-адрес и обратный вызов, чтобы вы могли сделать это со стороны клиента или передать его через собственный сервер:

http://www.pagemunch.com

Пример ответа для сайта BBC выглядит следующим образом:

{
"inLanguage": "en",
"schema": "http:\/\/schema.org\/WebPage",
"type": "WebPage",
"url": "http:\/\/www.bbc.co.uk\/",
"name": "BBC - Homepage",
"description": "Breaking news, sport, TV, radio and a whole lot more. The BBC informs, educates and entertains - wherever you are, whatever your age.",
"image": "http:\/\/static.bbci.co.uk\/wwhomepage-3.5\/1.0.64\/img\/iphone.png",
"keywords": [
   "BBC",
   "bbc.co.uk",
   "bbc.com",
   "Search",
   "British Broadcasting Corporation",
   "BBC iPlayer",
   "BBCi"
],
"dateAccessed": "2013-02-11T23:25:40+00:00"
}
1 голос
/ 24 января 2011

Это невозможно с чистым JavaScript из-за междоменной политики - клиентский скрипт не может читать содержимое страниц в других доменах, если этот другой домен явно не предоставляет сервис JSON.

Хитрость заключается в отправке запроса на стороне сервера (каждый язык на стороне сервера имеет свои собственные инструменты), разборе результатов с использованием регулярных выражений или некоторых других методов анализа строк, а затем использовании этого кода на стороне сервера в качестве «прокси» для вызова AJAX, выполненного «на fly "при публикации ссылки.

1 голос
/ 24 января 2011

Вы всегда можете просто посмотреть, что это в теге.Если вам нужно это в JavaScript, это не должно быть так сложно.Когда у вас есть данные, которые вы можете сделать:

var title = $(data).find('title').html();

Проблема будет в получении данных, так как я думаю, что большинство браузеров будут блокировать вас от выполнения межсайтовых запросов ajax.Вы можете обойти это, имея на своем сайте сервис, который будет выступать в качестве прокси-сервера и делать запрос для вас.Однако в этот момент вы можете также разобрать заголовок на сервере.Поскольку вы не указали, какой у вас язык бэк-энда, сейчас я не буду угадывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...