<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Komentarze do: Parser HTML: Python vs PHP</title>
	<atom:link href="http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/</link>
	<description>IT z innej strony :)</description>
	<lastBuildDate>Thu, 02 Feb 2012 16:27:36 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>Autor: DDarko</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-352</link>
		<dc:creator>DDarko</dc:creator>
		<pubDate>Wed, 05 Jan 2011 20:04:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-352</guid>
		<description>test.py:

from BeautifulSoup import BeautifulSoup
page = open(&#039;file.html&#039;).read()
tmp = &quot;Title: %s\nDescription: %s\nLink: %s\nUrl: %s\n----\n&quot;
for element in BeautifulSoup(page).findAll(&#039;div&#039;):
    element_link = element.find(&#039;a&#039;)
    print  tmp % (
           element.find(&#039;p&#039;, {&#039;class&#039; : &#039;title&#039;}).contents, 
           element.find(&#039;p&#039;, {&#039;class&#039; : &#039;description&#039;}).contents, 
           element_link.contents, element_link[&#039;href&#039;])


and run it by:
$ time python test.py</description>
		<content:encoded><![CDATA[<p>test.py:</p>
<p>from BeautifulSoup import BeautifulSoup<br />
page = open(&#8216;file.html&#8217;).read()<br />
tmp = &#8222;Title: %s\nDescription: %s\nLink: %s\nUrl: %s\n&#8212;-\n&#8221;<br />
for element in BeautifulSoup(page).findAll(&#8216;div&#8217;):<br />
    element_link = element.find(&#8216;a&#8217;)<br />
    print  tmp % (<br />
           element.find(&#8216;p&#8217;, {&#8216;class&#8217; : &#8216;title&#8217;}).contents,<br />
           element.find(&#8216;p&#8217;, {&#8216;class&#8217; : &#8216;description&#8217;}).contents,<br />
           element_link.contents, element_link['href'])</p>
<p>and run it by:<br />
$ time python test.py</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: DDarko</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-351</link>
		<dc:creator>DDarko</dc:creator>
		<pubDate>Wed, 05 Jan 2011 20:02:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-351</guid>
		<description>from BeautifulSoup import BeautifulSoup
page = open(&#039;file.html&#039;).read()
tmp = &quot;Title: %s\nDescription: %s\nLink: %s\nUrl: %s\n----\n&quot;
for element in BeautifulSoup(page).findAll(&#039;div&#039;):
    element_link = element.find(&#039;a&#039;)
    print  tmp % (
           element.find(&#039;p&#039;, {&#039;class&#039; : &#039;title&#039;}).contents, 
           element.find(&#039;p&#039;, {&#039;class&#039; : &#039;description&#039;}).contents, 
           element_link.contents, element_link[&#039;href&#039;])</description>
		<content:encoded><![CDATA[<p>from BeautifulSoup import BeautifulSoup<br />
page = open(&#8216;file.html&#8217;).read()<br />
tmp = &#8222;Title: %s\nDescription: %s\nLink: %s\nUrl: %s\n&#8212;-\n&#8221;<br />
for element in BeautifulSoup(page).findAll(&#8216;div&#8217;):<br />
    element_link = element.find(&#8216;a&#8217;)<br />
    print  tmp % (<br />
           element.find(&#8216;p&#8217;, {&#8216;class&#8217; : &#8216;title&#8217;}).contents,<br />
           element.find(&#8216;p&#8217;, {&#8216;class&#8217; : &#8216;description&#8217;}).contents,<br />
           element_link.contents, element_link['href'])</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: pats</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-329</link>
		<dc:creator>pats</dc:creator>
		<pubDate>Sat, 10 Jul 2010 18:29:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-329</guid>
		<description>@Chłopiec HTMLowo-Windowsowy: a możesz powiedzieć dlaczego?</description>
		<content:encoded><![CDATA[<p>@Chłopiec HTMLowo-Windowsowy: a możesz powiedzieć dlaczego?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Chłopiec HTMLowo-Windowsowy</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-325</link>
		<dc:creator>Chłopiec HTMLowo-Windowsowy</dc:creator>
		<pubDate>Tue, 18 May 2010 14:10:28 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-325</guid>
		<description>Świetny przykład na to, że znajomość języka programowania nie oznacza umiejętności programowania.

Niezależnie od tego co chciałeś pokazać, to HTMLa w ten sposób po prostu się nie parsuje!</description>
		<content:encoded><![CDATA[<p>Świetny przykład na to, że znajomość języka programowania nie oznacza umiejętności programowania.</p>
<p>Niezależnie od tego co chciałeś pokazać, to HTMLa w ten sposób po prostu się nie parsuje!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: on</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-311</link>
		<dc:creator>on</dc:creator>
		<pubDate>Thu, 07 Jan 2010 14:32:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-311</guid>
		<description>nowłacha!</description>
		<content:encoded><![CDATA[<p>nowłacha!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: uk</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-298</link>
		<dc:creator>uk</dc:creator>
		<pubDate>Sun, 29 Nov 2009 14:02:16 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-298</guid>
		<description>ku</description>
		<content:encoded><![CDATA[<p>ku</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Egz</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-289</link>
		<dc:creator>Egz</dc:creator>
		<pubDate>Fri, 30 Oct 2009 08:49:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-289</guid>
		<description>I dlaczego nie DOM (SimpleXML od biedy)? Sądzę, że głupim expatem wykonam te działania szybciej niż Twój kod i błędnych wyników nie będzie. Ewidetna stronniczość LUB brak odpowiedniej wiedzy do przeprowadzania takich testów.</description>
		<content:encoded><![CDATA[<p>I dlaczego nie DOM (SimpleXML od biedy)? Sądzę, że głupim expatem wykonam te działania szybciej niż Twój kod i błędnych wyników nie będzie. Ewidetna stronniczość LUB brak odpowiedniej wiedzy do przeprowadzania takich testów.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: marcin</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-274</link>
		<dc:creator>marcin</dc:creator>
		<pubDate>Thu, 20 Aug 2009 08:22:11 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-274</guid>
		<description>Hmm, na twoim miejscu trochę rzetelniej podszedłbym do tego typu testów. Przede wszystkim główny narzut czasowy pochodzi od bibliotek / nakładek, niemniej w żaden sposób nie podajesz czy to są najpopularniejsze, najlepsze i w ogóle dlaczego te. Rzetelniej byłoby napisać skrypty parsujące z palca.

Druga sprawa - patrz komentarz Kuby. W ostatnim teście różnica wynosiła 0,4 sekundy! To żadna różnica (szczególnie patrząc na poprzednie rezultaty). Zawsze wykonuje się serię testów i na końcu podaje się średni czas.

Ostatnia rzecz - cytując: &quot;wydaje mi się że można napisać skrypt tak, aby plik html traktował jak xml, ale ja to ominąłem&quot;, a potem zarzucasz PHP, że wypluwa błędne dane. Bez komentarza.

Ewidetnie próbowałeś udowodnić konkretną tezę. Trochę więcej obiektywności następnym razem.</description>
		<content:encoded><![CDATA[<p>Hmm, na twoim miejscu trochę rzetelniej podszedłbym do tego typu testów. Przede wszystkim główny narzut czasowy pochodzi od bibliotek / nakładek, niemniej w żaden sposób nie podajesz czy to są najpopularniejsze, najlepsze i w ogóle dlaczego te. Rzetelniej byłoby napisać skrypty parsujące z palca.</p>
<p>Druga sprawa &#8211; patrz komentarz Kuby. W ostatnim teście różnica wynosiła 0,4 sekundy! To żadna różnica (szczególnie patrząc na poprzednie rezultaty). Zawsze wykonuje się serię testów i na końcu podaje się średni czas.</p>
<p>Ostatnia rzecz &#8211; cytując: &#8222;wydaje mi się że można napisać skrypt tak, aby plik html traktował jak xml, ale ja to ominąłem&#8221;, a potem zarzucasz PHP, że wypluwa błędne dane. Bez komentarza.</p>
<p>Ewidetnie próbowałeś udowodnić konkretną tezę. Trochę więcej obiektywności następnym razem.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Kuba</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-259</link>
		<dc:creator>Kuba</dc:creator>
		<pubDate>Wed, 22 Jul 2009 18:15:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-259</guid>
		<description>Fajny test, najpierw stwierdziłeś że Python musi wygrać, a potem zmieniałeś środowisko testowe dopuki faktycznie nie wygrał. Gratuluję ;)</description>
		<content:encoded><![CDATA[<p>Fajny test, najpierw stwierdziłeś że Python musi wygrać, a potem zmieniałeś środowisko testowe dopuki faktycznie nie wygrał. Gratuluję ;)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Mateusz Żeromski</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-62</link>
		<dc:creator>Mateusz Żeromski</dc:creator>
		<pubDate>Sun, 29 Jun 2008 06:48:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-62</guid>
		<description>Masz rację - tak sobie myślę że taki kod w php nie jest możliwy w tym przypadku. A z tym kodem to wiem, a moze byc tak porównać omry z php i sqlalchemy  - tutaj będzie widać najlepiej potęgę pythona - może mi sie uda przed połową lipca, zobaczymy. Dzieki i pzdr.</description>
		<content:encoded><![CDATA[<p>Masz rację &#8211; tak sobie myślę że taki kod w php nie jest możliwy w tym przypadku. A z tym kodem to wiem, a moze byc tak porównać omry z php i sqlalchemy  &#8211; tutaj będzie widać najlepiej potęgę pythona &#8211; może mi sie uda przed połową lipca, zobaczymy. Dzieki i pzdr.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Alek</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-59</link>
		<dc:creator>Alek</dc:creator>
		<pubDate>Sat, 28 Jun 2008 21:52:12 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-59</guid>
		<description>Czytelnosc to sprawa wzgledna. Ja sadze, ze moj kod jest bardziej czytelny dla tych, ktorzy znaja Pythona. Nie o to jednak chodzi. 

Do napisania mojej wersji sklonilo mnie to, ze w tekscie porownujesz i wielkosc kodu i szybkosc wykonania. Wiec jesli chodzi o wielkosc kodu to pokazalem Ci, ze w Pythonie mozna pisac bardzo zwiezly i czytelny kod. To jedna z wazniejszych cech Pythona.

pozdrawiam</description>
		<content:encoded><![CDATA[<p>Czytelnosc to sprawa wzgledna. Ja sadze, ze moj kod jest bardziej czytelny dla tych, ktorzy znaja Pythona. Nie o to jednak chodzi. </p>
<p>Do napisania mojej wersji sklonilo mnie to, ze w tekscie porownujesz i wielkosc kodu i szybkosc wykonania. Wiec jesli chodzi o wielkosc kodu to pokazalem Ci, ze w Pythonie mozna pisac bardzo zwiezly i czytelny kod. To jedna z wazniejszych cech Pythona.</p>
<p>pozdrawiam</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Mateusz Żeromski</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-58</link>
		<dc:creator>Mateusz Żeromski</dc:creator>
		<pubDate>Sat, 28 Jun 2008 20:12:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-58</guid>
		<description>Owszem masz rację, ale ja celowo robilem dwie pętle po to aby kody php&#039;a i pythona były podobne, i czytelniejsze, Twój kod jest dobry, pewnie troszke jest szybszy niż mój ale też troszke bardziej skomplikowany a mi zależało aby również osoby nie znający dobrze pythona zrozumiały moje wypociny :).&lt;br&gt;
Każdą procedurę można zapisac na milion sposobów, gdybyś użył metody timeit() jak napisał ranza wtedy by było widać przewagę pythona nad php, a tak moim zdaniem, po prostu skompresowałeś mój kod, przez co, moze byc on bardziej nieczytelny, pzdr i dzieki :)</description>
		<content:encoded><![CDATA[<p>Owszem masz rację, ale ja celowo robilem dwie pętle po to aby kody php&#8217;a i pythona były podobne, i czytelniejsze, Twój kod jest dobry, pewnie troszke jest szybszy niż mój ale też troszke bardziej skomplikowany a mi zależało aby również osoby nie znający dobrze pythona zrozumiały moje wypociny :).<br />
Każdą procedurę można zapisac na milion sposobów, gdybyś użył metody timeit() jak napisał ranza wtedy by było widać przewagę pythona nad php, a tak moim zdaniem, po prostu skompresowałeś mój kod, przez co, moze byc on bardziej nieczytelny, pzdr i dzieki :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Alek</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-53</link>
		<dc:creator>Alek</dc:creator>
		<pubDate>Sat, 28 Jun 2008 17:52:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-53</guid>
		<description>Na PHP nie znam sie, ale w Pythonie napisal bym to tak:

&lt;code lang=&quot;python&quot;&gt;
from __future__ import with_statement
import time
start = time.time()
from BeautifulSoup import BeautifulSoup

with open(&#039;file.html&#039;) as f:
    page = f.read()

for element in BeautifulSoup(page).findAll(&#039;div&#039;):
    element_link = element.find(&#039;a&#039;)
    print &quot;Title: %s\nDescription: %s\nLink: %s\nUrl: %s\n----\n&quot; \
        % (element.find(&#039;p&#039;, {&#039;class&#039; : &#039;title&#039;}).contents, 
           element.find(&#039;p&#039;, {&#039;class&#039; : &#039;description&#039;}).contents, 
           element_link.contents, element_link[&#039;href&#039;])

print time.time() - start
&lt;/code&gt;

</description>
		<content:encoded><![CDATA[<p>Na PHP nie znam sie, ale w Pythonie napisal bym to tak:</p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">__future__</span> <span style="color: #ff7700;font-weight:bold;">import</span> with_statement<br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span><br />
start = <span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">from</span> BeautifulSoup <span style="color: #ff7700;font-weight:bold;">import</span> BeautifulSoup<br />
<br />
<span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'file.html'</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> f:<br />
&nbsp; &nbsp; page = f.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">for</span> element <span style="color: #ff7700;font-weight:bold;">in</span> BeautifulSoup<span style="color: black;">&#40;</span>page<span style="color: black;">&#41;</span>.<span style="color: black;">findAll</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'div'</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; element_link = element.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Title: %s<span style="color: #000099; font-weight: bold;">\n</span>Description: %s<span style="color: #000099; font-weight: bold;">\n</span>Link: %s<span style="color: #000099; font-weight: bold;">\n</span>Url: %s<span style="color: #000099; font-weight: bold;">\n</span>----<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> \<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>element.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'p'</span>, <span style="color: black;">&#123;</span><span style="color: #483d8b;">'class'</span> : <span style="color: #483d8b;">'title'</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>.<span style="color: black;">contents</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;element.<span style="color: black;">find</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'p'</span>, <span style="color: black;">&#123;</span><span style="color: #483d8b;">'class'</span> : <span style="color: #483d8b;">'description'</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>.<span style="color: black;">contents</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;element_link.<span style="color: black;">contents</span>, element_link<span style="color: black;">&#91;</span><span style="color: #483d8b;">'href'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #dc143c;">time</span>.<span style="color: #dc143c;">time</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - start</div></td></tr></tbody></table></div>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Mateusz Żeromski</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-46</link>
		<dc:creator>Mateusz Żeromski</dc:creator>
		<pubDate>Thu, 26 Jun 2008 15:15:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-46</guid>
		<description>Nie sądze aby to poprawiło jakkolwiek działanie procedury, ale swoją droga dość ciekawe to timeit() - dzięki za info.</description>
		<content:encoded><![CDATA[<p>Nie sądze aby to poprawiło jakkolwiek działanie procedury, ale swoją droga dość ciekawe to timeit() &#8211; dzięki za info.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: ranza</title>
		<link>http://blog.zeromski.com.pl/2008/05/parser-html-python-vs-php/comment-page-1/#comment-45</link>
		<dc:creator>ranza</dc:creator>
		<pubDate>Thu, 26 Jun 2008 11:14:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.zeromski.com.pl/?p=12#comment-45</guid>
		<description>Fajne.
Nie wiem jak to wygląda w php, ale w pythonie do mierzenia czasu powinieneś użyć timeit()</description>
		<content:encoded><![CDATA[<p>Fajne.<br />
Nie wiem jak to wygląda w php, ale w pythonie do mierzenia czasu powinieneś użyć timeit()</p>
]]></content:encoded>
	</item>
</channel>
</rss>

