ã¹ã¯ãªãããäœæããã«ã¯ãPythonèšèªã®åºæ¬çãªç¥èãããã°ã©ãã³ã°ã¹ãã«ãããã³ã³ãŒããããã°ã§ååã§ãã
ãã®èšäºã§ã¯ãåºçç©ã®ãªã¹ããã³ã³ãã€ã«ããäŸã«ã€ããŠãã©ã€ãã©ãªã®äœ¿çšã«é¢ãã説æãæäŸããŠããŸãã Golubitskyãäœæ¥ã¹ã¯ãªãããžã®ãªã³ã¯ã
åºæãŸãã¯æè©
ç§ã¯å€ãã®è¡å人ãã»ã«ã²ã€ã»ãŽã«ããããŒã®é£œãããšã®ãªãä»äºã«ç²ŸéããŠãããšèšã£ãŠããã®ã¯ééãã§ã¯ãããŸãã ã 15幎è¿ãã³ã³ãã¥ãŒã¿ãŒã«è¿ããžã£ãŒããªãºã ã§ãnamerekã¯ããŒããŒã¬ã¹Komputerã®å±±ã§433ä»¶ã®èšäºãçºè¡šããBoseã§æ©ã ã«äŒã¿ãComputerra-onlineããŒã¿ã«ã§300人以äžã®DovecatsãäŒã¿ãŸããã ãããŠãããã¯ãããžãã¹ãžã£ãŒãã«ã®å€åœäººã®ã²ãŒã·ã§ããã®è±éã«é¢ããåæç ç©¶ããããŒã ã³ã³ãã¥ãŒã¿ãŒãã®åµé æ§ã®ç§å¯ã«å¯ŸããããŒã«ã®éæŸãããã·ã¢ãžã£ãŒãã«ãã®èšäºããDããªã©ãæ°ããŠããŸããã ãªã©ãªã©ã çåœåµé ã®å®å šæ§ã®ã¬ãã¥ãŒã«èå³ããã人ã¯ãäžèšã®ãªã³ã¯ã«ãããŸãã
æšå¹Žãèè ã®ãããžã§ã¯ããThe Old Pigeon House and His Friends ããæŽ»åãéå§ããŸãããããã¯ãç¹ã«èè ã®åºçç©ã¢ãŒã«ã€ããšæåçããããªã¢ã³ã®è°è«ãè¡ãããã®ãã©ãããã©ãŒã ã«ãã£ãŠçµ¶ããè£å ãããŸããã ãããã¯ãŒã¯ã©ã€ãã瀟äŒç¥è©±ãèªå·±åçºã®ãããã¯ã«ç¡é¢å¿ã§ã¯ãªããèè ã«ãã£ãŠèŠäºã«æããã«ãããé«å質ã®ã¬ãžã£ãŒèªæžã«ãç±å¿ãªäººãšããŠãç§ã¯ãã€ãŠDovecoteã§ã®éãŸãã®åžžé£ã«ãªããŸããã ç§ã®èœåãæå€§éã«æŽ»çšããŠããããžã§ã¯ããèŠçã«å ¥ããã ãã§ãªããäœããã®åœ¢ã§ãã®éçºã«åå ããããã«ããŠããŸãã
Computerra-onlineããŒã¿ã«ããã¢ãŒã«ã€ãã«è»¢éãããèšäºã®æ ¡æ£ã®åéã§åããŠããéãç§ãæåã«ããããšã¯ããã¹ãŠã®é³©ã®ç®é²ãç·šéããããšã§ããã
åé¡ã®å£°æ
ãã®ãããPythonã§ãµã€ãã®è§£æãæ€èšããäŸã§ã®ã¿ã¹ã¯ã¯æ¬¡ã®ãšããã§ããã
- Computerre-onlineã§ãã¹ããããŠãããã¹ãŠã®Dovecatã®ãªã¹ããäœæããŸãã ãªã¹ãã«ã¯ãèšäºã®ã¿ã€ãã«ãçºè¡æ¥ãèšäºã®å 容ã«é¢ããæ å ±ïŒããã¹ãã®ã¿ãåçããããªïŒãæŠèŠããœãŒã¹ãžã®ãªã³ã¯ãå«ããå¿ èŠããããŸãã
- è«æComputerraã«æ²èŒãããŠããè³æããªã¹ãã«è¿œå ããéè€ãèŠã€ããŸãã
- ãŠã§ããµã€ãInternettrading.netã®ã¢ãŒã«ã€ãããã®è³æã§ãªã¹ããè£è¶³ãã
- ãOld PigeonãããŒã¿ã«ã§æ¢ã«å ¬éãããŠããèšäºã®ãªã¹ããããŠã³ããŒããã
- å¯èœã§ããã°ãäžå¿ èŠãªèŠçŽ ã®ããã¹ããèªåçã«ã¯ãªã¢ããŠãèšäºãããŒã«ã«ãã£ã¹ã¯ã«ããŠã³ããŒãããŠããã«åŠçããŸãã
ããŒã«ãããã®éžæ
ããã°ã©ãã³ã°èšèªã«é¢ããŠã¯ãç§ã®éžæã¯ããã«æç¢ºã«Pythonã«èœã¡ãŸããã æ°å¹Žåã«äœæã«å匷ããïŒãããŠãã°ããã®éãé«åºŠãªèšç®æ©ãšããŠActive Pythonã·ã§ã«ã䜿çšããïŒã ãã§ãªããè±å¯ãªã©ã€ãã©ãªããœãŒã¹ã³ãŒãã®äŸãã¹ã¯ãªããã®äœæãšãããã°ã®å®¹æãã®ããã«ãã ç¹ã«ã圌ãã¯ãGoogle Docs APIãšã®çµ±åãã¯ãŒãããã»ãã·ã³ã°ã®èªååãªã©ãå·®ãè¿«ã£ãåé¡ã解決ããããã«ç²åŸããã¹ãã«ãããã«æŽ»çšããå¯èœæ§ã«ãé¢å¿ããããŸããã
éåžžã«ç¹å®ã®ã¿ã¹ã¯ããŒããã解決ããããã«ãããŒã«ãããã¯ãããã¥ã¡ã³ãã®èªã¿åããã©ã€ãã©ãªã®æ¯èŒãããã³æçµçãªå®è£ ã«æå°éã®æéãè²»ããããã«éžæãããŸããã äžæ¹ããœãªã¥ãŒã·ã§ã³ã«ã¯ãä»ã®ãµã€ããåæ§ã®ã¿ã¹ã¯ã«ç°¡åã«é©å¿ã§ããååãªæ±çšæ§ãå¿ èŠã§ãã ããããäžéšã®ããŒã«ãšã©ã€ãã©ãªã¯äžå®å šã§ãããæçµçã«èšç»ãçµããããããšãã§ããŸããã
ãã®ãããããŒã«ã®éžæã«ãããPythonã®é©åãªããŒãžã§ã³ã決å®ããå§ããŸããã æåã¯Python 3.2ã䜿çšããŠã¿ãŸããããå®éšäžã«Python 2.7ã§åæ¢ããŸããã ãããã€ã«ãã®ããã€ãã®äŸã¯è¡ããªãã£ãã
远å ã®ã©ã€ãã©ãªãšããã±ãŒãžã®ã€ã³ã¹ããŒã«ãç°¡çŽ åããããã«ãããã±ãŒãžãããŠã³ããŒãããã«ããã€ã³ã¹ããŒã«ããããã®ããŒã«ã§ããsetuptoolsã䜿çšããŸããã
ããã«ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãããŸããïŒ
- urllib-ãµã€ãã®HTMLããŒãžãåä¿¡ã
- lxml -XMLããã³HTMLã³ãŒããè§£æããããã®ã©ã€ãã©ãªã
- configobjã¯ãæ§æãã¡ã€ã«ãèªã¿åãããã®ã©ã€ãã©ãªã§ãã
å³èã®ææ®µã䜿çšãããããïŒ
- Notepad ++ã¯ãæ§æã匷調衚瀺ãããããã¹ããšãã£ã¿ãŒã§ãã
- FireBug -HTMLããŒãžã®ãœãŒã¹ã³ãŒãã衚瀺ã§ããFireFoxãã©ãŠã¶ãŒãã©ã°ã€ã³
- FirePath -XPathåæããã³ãã¹ãçšã®FireFoxãã©ãŠã¶ãŒãã©ã°ã€ã³ïŒ
- ã³ãŒãããããã°ããããã®çµã¿èŸŒã¿Python GUIã
Habréã«é¢ããèšäºãšãã£ã¹ã«ãã·ã§ã³ã¯ãéåžžã«åœ¹ç«ã€ãã«ããæäŸããŸããã
- WebããŒã¿æ€çŽ¢ã¢ãããŒã
- xpath htmlãªã¯ãšã¹ãã®äŸ
- ãLXMLããŸãã¯HTMLãç°¡åã«è§£æããæ¹æ³
- ãµã€ããè§£æããã©ã€ãã©ãª
- Beautiful Soupã䜿çšããç°¡åãªWebãµã€ãè§£æ
ããã¥ã¢ã«ãäŸãããã³ããã¥ã¡ã³ãïŒ
- Python 3ïŒPilgrimïŒã®ã€ããŒãžã§ã³/ XML
- ããã±ãŒãžlxmlã APIãªãã¡ã¬ã³ã¹
- MSDNã©ã€ãã©ãªã®XPathã®äŸ
- Pytonããã¥ã¡ã³ãã®ElementTree XML API
- lxml.etreeãã¥ãŒããªã¢ã«
ãããŠãã¡ããã Pythonããã°ã©ãã³ã°èšèªã®æ¬
ãœãªã¥ãŒã·ã§ã³ã®æŠèŠ
ãã®ã¿ã¹ã¯ã«ã¯ã4ã€ã®ç°ãªããµã€ãããè³æãããŠã³ããŒãããããã®4ã€ã®åæ§ã®æé ãå«ãŸããŠããŸãã ãããã®ããããã«ã¯ãèšäºã®ãªã¹ããšè³æãžã®ãªã³ã¯ããã1ã€ãŸãã¯è€æ°ã®ããŒãžããããŸãã æé ã®åœ¢åŒåãšçµ±äžã«å€ãã®æéãè²»ãããªãããã«ãåºæ¬çãªã¹ã¯ãªãããäœæãããŸãããããã«åºã¥ããŠãææã®ãªã¹ãã®æ§é ãšHTMLããŒãžã®æ§æã®ç¹æ§ãèæ ®ããŠããµã€ãããšã«ã«ã¹ã¿ã ã¹ã¯ãªãããéçºãããŸããã ãã®ãããHTMLãæåã§çæããããšæãããInternettrading.netäžã®çŽ æã®è§£æã«ã¯ãCMS DrupalïŒãOld Pigeon House and His FriendsãïŒããã³BitrixïŒãComputerra-onlineããã¢ãŒã«ã€ãã³ã³ãã¥ãŒã¿ãŒã®è«æïŒããŒãžã«ã¯æå°éã®æ©èœãå«ãŸããŠããŸããã
å°æ¥ãOld Blueberryã®ããŒã¿ã«ãè§£æããããã®æŽå²çã«ææ°ã®ã¹ã¯ãªããã®è©³çްãåç §ããŸãã
èšäºã®ãªã¹ãã¯ã ã«ã¡ã©ãã³ ãã»ã¯ã·ã§ã³ã«è¡šç€ºãããŸãã ããã«ååãèšäºãžã®ãªã³ã¯ãæŠèŠããããŸãã ãªã¹ãã¯ããã€ãã®ããŒãžã«åãããŠããŸãã ã«ãŒãå ã§ã¢ãã¬ã¹ããŒã®ãã©ã¡ãŒã¿ãŒïŒïŒPage = nïŒã倿Žããããšã§æ¬¡ã®ããŒãžã«ç§»åã§ããŸãããHTMLããã¹ãããæ¬¡ã®ããŒãžãžã®ãªã³ã¯ãååŸããæ¹ããšã¬ã¬ã³ãã«æããŸããã
èšäºã®ããŒãžã«ã¯ãDD YYYYæåœ¢åŒã®çºè¡æ¥ãç¬èªã®ããã¹ããããã³çœ²åã®ãœãŒã¹ã®è¡šç€ºããããŸãã
ããŸããŸãªã¿ã€ãã®ããŒã¿ãåŠçããããã«ã2ã€ã®ãªããžã§ã¯ããäœæãããŸããïŒ MaterialListïŒãªããžã§ã¯ãïŒ -èšäºã®ãªã¹ãïŒ _ParseListãªã¹ãã®å¥ã®ããŒãžãè§£æããã¡ãœãããšã次ã®ããŒãžã®URLãååŸããã¡ãœãã_GetNextPageãå«ã¿ ããããªã¢ã«ãšãã®èå¥åã®ãªã¹ããä¿åããŸãïŒããã³MaterialïŒãªããžã§ã¯ãïŒ -èšäºèªäœïŒ _InitIDæ¥ä»ã«åºã¥ããŠèå¥åãçæããã¡ãœããã _ParsePageããŒãžã®è§£æã¡ãœãããçºè¡å _GetSectionãæ±ºå®ããã¡ãœãããããã³çºè¡æ¥ãè³æã¿ã€ããªã©ã®èšäºå±æ§ãå«ãŸããŸãã
ããã«ãããã¥ã¡ã³ãããªãŒã®èŠçŽ ãæäœããããã®é¢æ°ãå®çŸ©ãããŠããŸãã
- get_textïŒitemãpathïŒ -ããã¥ã¡ã³ãã¢ã€ãã ã® ãã¹ãã¹ã«æ²¿ã£ãŠèŠçŽ ã®ããã¹ããååŸãã
- get_valueïŒitemïŒ - ã¢ã€ãã ããã¥ã¡ã³ãã®ããŒãããã¹ããååŸãã
- get_value_pathïŒitemãpathïŒ - ãã¹ã«æ²¿ã£ãã¢ã€ãã ããã¥ã¡ã³ãå ã®ããŒãã®ããã¹ããååŸ
- get_attr_pathïŒitemãpathãattrïŒ -ããã¥ã¡ã³ãã¢ã€ãã ã® ãã¹ãã¹ã«æ²¿ã£ãèŠçŽ ã®å±æ§ãååŸ
ãŸãã get_month_by_nameïŒmonthïŒé¢æ°ã¯ãæ¥ä»ãè§£æããããã«ååã§æçªå·ãè¿ããŸãã
ã¡ã€ã³ã³ãŒãïŒ ã¡ã€ã³ïŒïŒããã·ãŒãžã£ïŒã«ã¯ããã¡ã€ã«ããæ§æãããŒãããã³ã³ãã³ããã¡ã¢ãªã«ããŒãããŠè³æã®ãªã¹ãã®ããŒãžãééããããã«ãªã¹ãèªäœïŒCSV圢åŒïŒããã³èšäºããã¹ãïŒHTMLã§ãã¡ã€ã«åã圢æãããïŒã«ãã¡ã€ã«ãä¿åããŸãææèå¥åã«åºã¥ããŠïŒã
æ§æãã¡ã€ã«ã«ã¯ãã³ã³ãã³ããªã¹ãã®éå§ããŒãžã®URLãã³ã³ãã³ãããŒãžãšèšäºãªã¹ãã®ãã¹ãŠã®XPathãã¹ããã¡ã€ã«åãèšäºãä¿åããããã®ãã£ã¬ã¯ããªãã¹ãæ ŒçŽãããŸãã
å®è£ ã®è©³çް
ãã®ããŒãã§ã¯ããªãããã®åœ¢ã§åé¡ãå«ç ããã¥ã¢ã«ãåŒãèµ·ãããã³ãŒãã®äž»ãªãã€ã³ãã«ã€ããŠèª¬æããŸãã
ããã¥ã¡ã³ãå ã®ãã¹ã®ãããã°ãç°¡çŽ åããã³ãŒãã®èªã¿åãã容æã«ããããã«ããã¹ãŠã®XPathã¯å¥ã®æ§æãã¡ã€ã«ã«ç§»åãããŸããã configobjã©ã€ãã©ãªã¯ãæ§æãã¡ã€ã«ã®æäœã«éåžžã«é©ããŠããŸããã æ§æãã¡ã€ã«ã®æ§é ã¯æ¬¡ã®ãšããã§ãã
# Comment
[ Section_1 ]
# Comment
variable_1 = value_1
# Comment
variable_2 = value_2
[[Subsection_1]]
variable_3 = value_3
[[Subsection_2]]
[ Section_2 ]
ãµãã»ã¯ã·ã§ã³ã®ãã¹ãã¯ä»»æã§ãããã»ã¯ã·ã§ã³ããã³ç¹å®ã®å€æ°ã«é¢ããã³ã¡ã³ããèš±å¯ãããŸãã æ§æãã¡ã€ã«ã®äœ¿çšäŸïŒ
from configobj import ConfigObj
#
cfg = ConfigObj('sgolub-list.ini')
# url sgolub
url = cfg['sgolub']['url']
htmlããŒãžã®ããŠã³ããŒãã¯ã urllibã©ã€ãã©ãªã䜿çšããŠå®è£ ãããŸãã lxmlã䜿çšããŠãããã¥ã¡ã³ããããªãŒã«å€æããçžå¯Ÿãªã³ã¯ãä¿®æ£ããŸãã
import urllib
from lxml.html import fromstring
# html-
html = urllib.urlopen(url).read();
# lxml.html.HtmlElement
page = fromstring(html)
#
page.make_links_absolute(url)
åºçç©ã®ãªã¹ããè§£æãããšãããªã¹ãã®ãã¹ãŠã®èŠçŽ ãã«ãŒãããå¿ èŠããããŸãã ããã«ã¯lxml.html.HtmlElement.findallïŒãã¹ïŒã¡ãœãããé©ããŠããŸãã äŸïŒ
for item in page.findall(path):
url = get_attr_path(item,cfg['sgolub']['list']['xpath_link'],'href')
ä»ãããFirePathãã©ã°ã€ã³ãšãXPathãæ§ç¯ããããã®ãã®äœ¿çšã«ã€ããŠã³ã¡ã³ããããšãã§ãã å®éããã§ã«HabrÃ©ã§æžãããŠããããã«ãFirePathã¯lxmlã®ãã¹ãšã¯ç°ãªããã¹ãæäŸããŸãã å°ãã§ãããéãããããŸãã ããã«ããããã®éããç¹å®ãããåŸã§ä¿®æ£ã§FirePathã䜿çšããŸãããããšãã°ãtbodyã¿ã°ã*ïŒæãäžè¬çãªåé¡ïŒã«çœ®ãæããŸãã åæã«ããã®æ¹æ³ã§èª¿æŽããããã¹ãFirePathã§ãã§ãã¯ã§ãããããããã»ã¹ãå€§å¹ ã«é«éåãããŸãã
page.findall(path)
ã¯èŠçŽ ã®ãªã¹ããè¿ããŸãããåäžã®èŠçŽ ãååŸããfindïŒãã¹ïŒã¡ãœããããããŸãã äŸïŒ
content = page.find(cfg['sgolub']['doc']['xpath_content'])
findããã³findallã¡ãœããã¯ãæ¡ä»¶ã«è«çåŒãå«ãŸãªãåçŽãªãã¹ã§ã®ã¿æ©èœããŸããæ¬¡ã«äŸã瀺ããŸãã
xpath_blocks = './/*[@id='main-region']/div/div/div/table/*/tr/td'
xpath_nextpage = './/*[@id='main-region']/div/div/div/ul/li[@class="pager-next"]/a[@href]'
ããè€éãªæ¡ä»¶ã䜿çšããã«ã¯ãããšãã°ã
xpath_purifytext = './/*[@id="fin" or @class="info"]'
èŠçŽ ã®ãªã¹ããè¿ãxpathïŒpathïŒã¡ãœãããå¿ èŠã«ãªããŸãã 以äžã¯ãéžæããèŠçŽ ãããªãŒããåé€ãããµã³ãã«ã³ãŒãã§ãïŒãã®éæ³ã®ä»çµã¿ã¯ãŸã ããããŸããããèŠçŽ ã¯å®éã«ã¯ããªãŒããåé€ãããŠããŸãïŒã
from lxml.html import tostring
for item in page.xpath(cfg['computerra']['doc']['xpath_purifytext']):
item.drop_tree()
text=tostring(page,encoding='cp1251')
ãã®ãã©ã°ã¡ã³ãã§ã¯ãlxml.html.tostringã¡ãœããã䜿çšããŸãããã®ã¡ãœããã¯ãæå®ããããšã³ã³ãŒãã£ã³ã°ã®æååã«ããªãŒãä¿åããŸãïŒäœåãªèŠçŽ ã¯ãããããŸããïŒïŒã
çµè«ãšããŠã reåŒã©ã€ãã©ãªreã§äœæ¥ãã2ã€ã®äŸã瀺ããŸãã æåã®äŸã¯ããDD Month YYYYãã®åœ¢åŒã§æ¥ä»è§£æãå®è£ ããŸãã
import re
import datetime
# content lxml.html.HtmlElement
# ,
datestr=get_text(content,cfg['sgolub']['doc']['xpath_date'])
if len(datestr)>0:
datesplit=re.split('\s+',datestr,0,re.U)
self.id = self._InitID(list,datesplit[2].zfill(4)+str(get_month_by_name(datesplit[1])).zfill(2)+datesplit[0].zfill(2))
self.date = datetime.date(int(datesplit[2]),get_month_by_name(datesplit[1]),int(datesplit[0]))
else:
self.id = self._InitID(list,list.lastid[0:8])
self.date = datetime.date(1970,1,1)
re.split颿°ïŒregexpãstringãstartãoptionsïŒã䜿çšãããç¹å®ã®ãã¹ã¯ïŒãã®å Žåã¯ã¹ããŒã¹ïŒã§åºåãããè¡èŠçŽ ã®ãªã¹ãã圢æããŸãã re.Uãªãã·ã§ã³ã䜿çšãããšãUnicodeã§ãã·ã¢æåãå«ãæååãæäœã§ããŸã ã zfillïŒnïŒé¢æ°ã¯ãæå®ãããæåæ°ãŸã§å·ŠåŽã®ãŒãã§æååãçµäºããŸãã
2çªç®ã®äŸã¯ãæ£èŠè¡šçŸã䜿çšããŠãµãã¹ããªã³ã°ãèŠã€ããæ¹æ³ã瀺ããŠããŸãã
def _GetSection(item, path):
#
reinfo = re.compile(r'.*«(?P<gsource>.*)».*',re.LOCALE)
for info in item.xpath(path):
src=get_value_path(info,'.').strip('\n').strip().encode('cp1251')
if src.startswith(' '):
parser = self.reinfo.search(src)
if parser is not None:
if parser.group('gsource')=='-':
return '-'
else:
return parser.group('gsource')
break
return ''
äžèšã®äŸã¯ã颿°_GetSectionïŒitemãpathïŒã®ã³ãŒãã瀺ããŠããŸãããã®ã³ãŒãã«ã¯ããBusiness Journalã§æåã«çºè¡ãããããªã©ãçºè¡å ã®è¡šç€ºãå«ããµãããªãŒãæž¡ãããŸãã æ£èŠè¡šçŸã¹ããããïŒP <gsource>ã«æ³šç®ããŠãã ãã ã æ¬åŒ§ãå ¥ãããšãååä»ãã°ã«ãŒããæååã§å®çŸ©ãã parser.groupïŒ 'gsource'ïŒã䜿çšããŠãããã«ã¢ã¯ã»ã¹ã§ããŸãã re.LOCALEãªãã·ã§ã³ã¯re.Uã«äŒŒãŠããŸãã
ããŒãµãŒã®ãœãŒã¹ã³ãŒããGoogle Docsã«ã¢ããããŒããããŸã ã Old Pigeonã®ãµã€ããããŒãµãŒã®ã¹ããªãŒã ããä¿è·ããããã«ããªã³ã¯ãšãã¹ãå«ãæ§æãã¡ã€ã«ãªãã§ãã³ãŒãã®ã¿ãæçš¿ããŸãã
ãããã«
ãã®æè¡ãé©çšããçµæãããŒããã©ã€ãäžã®4ã€ã®ãµã€ãã®èšäºãšDovecatsã®ãã¹ãŠã®åºçç©ã®ãªã¹ãã®ã¢ãŒã«ã€ããã§ããŸããã ãªã¹ãã¯Googleããã¥ã¡ã³ãã®ã¹ãã¬ããã·ãŒãã«æåã§ã¢ããããŒããããã¢ãŒã«ã€ãããã®èšäºãç·šéã®ããã«Googleããã¥ã¡ã³ãã«æåã§è»¢éãããŸããã
åé¡è§£æ±ºã®èšç»ïŒ
- æ°ããæçš¿ãèªåçã«è¿œè·¡ãããµãŒãã¹ãæžã
- Google Docs APIãšã®çµ±åã«ãããæ°ããæçš¿ãèªåçã«ãªã¹ãããŸã
- ã¢ãŒã«ã€ããããèšäºãHTMLããXML圢åŒã«å€æããããã€ãã®ãšã©ãŒãèªåä¿®æ£ããŠGoogleããã¥ã¡ã³ãã«ã¢ããããŒããã
PSã³ã¡ã³ãããµããŒãã建èšçãªæ¹å€ã«æè¬ããŸãã æ³šææ·±ãå匷ããåŸãã³ã¡ã³ãã®å€§éšåãå°æ¥ç§ã«ãšã£ãŠåœ¹ç«ã€ããšãé¡ã£ãŠããŸãã