Парсинг php file_get_contents

Парсинг PHP: Функция file_get_contents

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

file_get_contents — Читает содержимое файла в строку

Для того чтобы спарсить данные с помощью этой функции, нужно просто передать ей в качестве параметра ссылку. После чего вывести эту информацию любой функцией вывода(echo, print_r, var_dump).

Для примера возьмем главную страницу нашего сайта – http://prog-time.ru

$my_site = file_get_contents('http://prog-time.ru'); //записываем информацию в переменную
echo $my_site ; //выводим

Таким методом мы получаем всю страницу. Но что делать если нам нужна не вся страница, а какая то её часть, например заголовок?

Для этого можно использовать регулярные выражения.

Парсинг с помощью регулярок

Регулярные выражения используются для обрезании строки по определенному шаблону.

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

Для этого можно использовать такой вид регулярного выражения – #<title>(.+?)</title>#su.

Первая и последняя #указывает начало и конец регулярного выражения. Между ними пишется тег, который нужно забрать, в моем случае это title.

$my_site = file_get_contents('http://prog-time.ru');//получаем информацию и записываем ее в переменную
preg_match_all('#<title>(.+?)</title>#su', $my_site, $res);//вырезаем нужную часть
var_dump($res);//выводим на экран

preg_match_allпервым параметром получает регулярное выражение, вторым строку(или имя переменной, которая хранит в себе строку), а последним – имя переменной, в которую нужно записать полученный результат.

Данный код должен вывести на экран массив со строкой содержимого тега title.

Не смотря на то что мы смогли добиться нужного результата, мы можем улучшить наш код.

Дело в том, что представленный выше код, может проверять только теги которые не имеют атрибутов. Но что если нам нужны теги которые могут иметь атрибуты.

Для этого нам поможет вот эта регулярка – #<title .*>(.+?)</title>#su

Это регулярное выражение найдет указанный тег, если у него есть атрибуты или если их у него нет.

Это все выглядит отлично, но что если нужно получить тег по определенному значению выбранного атрибута. Например нам нужно получить тег div у которого атрибут class = test.

Для этого будем использовать вот это регулярное выражение –
#<div\class="test">(.+?)</div>#su .

Ну все, теперь точно идеально…если не учитывать пробелы! Да, могут же быть пробелы. Например так <div class="test" ></div> или так <div class="test" ></div> .

Если будут пробелы, то наше регулярное выражение не подойдет. Надо исправить!

Вот! – #<div\s+?id\s*?=\s*?"content"\s*?>(.+?)</div>#su

\s – допускает присутствие пробелов

С пробелами мы разобрались,а что если у тега будут еще и другие атрибуты? Для решения такой задачи, нужно указать что перед и после нашего атрибута могу быть другие атрибуты.

#<div[^>]+?id\s*?=\s*?"content"[^>]*?>(.+?)</div>#su

Вот такая конструкция подойдет.

Ну а что нам теперь делать с кавычками? Ведь для записи значения атрибуту могут использовать как одинарные, так и двойные кавычки.

Вот окончательный вариант регулярного выражения – #<div[^>]+?id\s*?=\s*?["\']content["\'][^>]*?>(.+?)</div>#su

Окончательный вариант кода будет выглядеть так:

$my_site = file_get_contents('http://prog-time.ru');
preg_match_all('#<div[^>]+?id\s*?=\s*?["\']test["\'][^>]*?>(.+?)</div>#su',$my_site, $res);
var_dump($res);

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

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

На этом всё!
Если у вас есть вопросы, пишите их в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime

59
Оставить комментарий

avatar
59 Цепочка комментария
0 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
57 Авторы комментариев
GeorgeOvagsJamesSahJamesSahJamesSahCarlosVem Авторы недавних комментариев
  Подписаться  
новее старее большинство голосов
Уведомление о
StepFoush
Гость

Viagra Prescription Cost [url=http://apcialisle.com/#]Cialis[/url] Acquisto Levitra Bayer cialis cheapest online prices Propecia Interactions Drug Information

StepFoush
Гость

Viagra Livraison Express [url=https://apcialisle.com/#]Buy Cialis[/url] Cephalexin Perscribed For Buy Cialis Vendita Viagra Generico In Europa

JanleF
Гость

Cephalexin And Pain In Calf [url=http://cialibuy.com/#]buy cialis online with a prescription[/url] Skypharmacy Cialis Aciclovir Cheap

JanleF
Гость

Cialis 28cpr Riv 5mg [url=https://apcialisle.com/#]buy cialis in canada[/url] Donde Comprar Cialis Barcelona Cialis Where Cam I Buy Proponalol

bemnite
Гость
bemnite

where to buy cialis in dubai canadian pharmacy online viagra prescription

AlvinCox
Гость
AlvinCox

cialis sale online australia cheap cialis cialis liquid for sale

CharlesGOP
Гость
CharlesGOP

cheap viagra 150 mg order cialis viagra sale northern ireland

Waltonplort
Гость
Waltonplort

order viagra with mastercard https://viagrawithoutdoctorspres.com cheap levitra prices generic vicodin xanax

BarryNaW
Гость
BarryNaW

viagra buy in london canada pharmacy very cheap viagra uk

Jefferykap
Гость
Jefferykap

cialis sale usa viagra without a doctor prescription cialis cheap no prescription

Marvinerulk
Гость
Marvinerulk

order levitra no prescription http://alexa24ph.com – generic viagra buy cialis soft tabs online

Marvinerulk
Гость
Marvinerulk

how to order viagra in australia http://kaletra24.com – Lopinavir buy cialis in canada

Marvinerulk
Гость
Marvinerulk

discount viagra for sale http://tadal24ph.com – generic cialis buy cheap viagra and cialis

Marvinerulk
Гость
Marvinerulk

best place order cialis http://alexa24ph.com – viagra online buy cialis amsterdam

Marvinerulk
Гость
Marvinerulk

buy viagra visa electron http://alexa24ph.com – generic viagra 100mg where to buy viagra uk

Marvinerulk
Гость
Marvinerulk

cheap authentic cialis http://aralenph.com – alaren price cheap levitra online no prescription

Marvinerulk
Гость
Marvinerulk

how to buy cialis online uk http://hydroxychloroquine24.com – plaquenil cheap levitra india

Marvinerulk
Гость
Marvinerulk

cheap viagra buy http://zithazi.com – generic zithromax cialis pills sale canada

Marvinerulk
Гость
Marvinerulk

buy cialis brand http://tadal24ph.com – cialis online mail order viagra generic

Marvinerulk
Гость
Marvinerulk

purchase cialis online cheap http://aralenph.com – buy chloroquine online can cialis pills cut

AlfredAdvog
Гость
AlfredAdvog

cheap viagra
buy levitra australia

AlfredAdvog
Гость
AlfredAdvog

generic viagra
where to buy cialis in usa

AlfredAdvog
Гость
AlfredAdvog

viagra online
how do cialis pills look like

AlfredAdvog
Гость
AlfredAdvog

viagra pills
cheapest cialis and viagra

AlfredAdvog
Гость
AlfredAdvog
AlfredAdvog
Гость
AlfredAdvog

viagra
how to take cialis pills

AlfredAdvog
Гость
AlfredAdvog

generic viagra available
cialis tadalafil 20 mg tablets

AlfredAdvog
Гость
AlfredAdvog

sildenafil
buy cialis boots

AlfredAdvog
Гость
AlfredAdvog

viagra pills
viagra generic name

AlfredAdvog
Гость
AlfredAdvog

sildenafil
is cialis generic

DennisLof
Гость
DennisLof

cialis dosage generic cialis
coupon for cialis by manufacturer

DennisLof
Гость
DennisLof

what is cialis buy here
cialis tolerance

DonaldTwill
Гость
DonaldTwill

cialis vs viagra generic viagra
п»їviagra

DonaldTwill
Гость
DonaldTwill

viagra in action cheapest viagra
how long does viagra last

JosephDiona
Гость
JosephDiona

viagra or cialis is cialis generic available
generic cialis at walmart

JosephDiona
Гость
JosephDiona

cialis ingredient warnings for cialis
liquid cialis

Thomasreeld
Гость
Thomasreeld

real viagra without a doctor prescription: india pharmacy viagra levitra discount coupon

Thomasreeld
Гость
Thomasreeld

viagra single packs: viagra prescription order cialis no prescription canada

JohnnieQuabs
Гость
JohnnieQuabs

ed meds online without prescription or membership best price for generic viagra on the internet real viagra without a doctor prescription onlinepharmacyero.com

JohnnieQuabs
Гость
JohnnieQuabs

cialis without a doctor’s prescription prescription drugs without doctor approval amoxicillin without a doctor’s prescription onlinepharmacyero.com

Michaeldus
Гость
Michaeldus

where to bay cialis (tadalafil) pills 80mg cialis

Michaeldus
Гость
Michaeldus

cost of cialis 20mg tablets viagra without doctor prescription

Jeffreymax
Гость
Jeffreymax

does medicaid cover cialis: cialis generic

Jeffreymax
Гость
Jeffreymax

generic cialis available: cialis

JamieSog
Гость
JamieSog

revatio vs viagra: viagra
wikigogy.org

treantinc
Гость
treantinc

Buy One Dose Azithromycin Trokvome [url=https://ascialis.com/#]buy cialis canada pharmacy[/url] Artegelp Donde Se Puede Comprar Viagra nagnincarp Cialis psyproneeree Viagra En Vente Libre En Pharmacie

JamieSog
Гость
JamieSog

generic viagra india 100mg: best generic viagra websites
wikigogy.org

Justinrom
Гость

how to take cialis: buy cialis online
warrensburgfmc.org buy cialis

Justinrom
Гость

does cialis make you bigger: generic cialis tadalafil 20mg
warrensburgfmc.org generic cialis tadalafil 20mg

Williekek
Гость
Williekek

http://stylid.org/ – buy generic ed pills online