PyQuery
Python verfügt über ein praktisches Modul namens PyQuery, das eine jQuery-ähnliche API bereitstellt. Schöne Suppe scheint auf den Straßen beliebt zu sein, aber PyQuery ist definitiv einfacher zu bedienen. Da die Basis lxml ist, denke ich, dass Leistung und Zuverlässigkeit auch garantiert sind.
Wenn Sie die URL an den Konstruktor übergeben, wird sie für Sie abgerufen. Sie können auch HTML-Zeichenfolgen oder Dateiobjekte übergeben. Wenn Sie danach eine Zeichenfolge angeben, die dem jQuery-Selektor ähnelt, können Sie alle übereinstimmenden Elemente abrufen.
Es ist auch möglich, jedes Element durch Übergeben eines Lambda-Ausdrucks oder einer Lambda-Funktion zu bedienen. Wenn Sie jQuery kennen, können Sie sich vorstellen, was Sie tun können. Weitere Informationen finden Sie im Handbuch!
Geben Sie dem ausgewählten Element mit der Methode .each () Attribute. class
ist ein reserviertes Wort in Python. Wenn Sie es also auf class_
setzen, handelt es sich um eine HTML-Klasse.
sample.py
from pyquery import PyQuery as pq
html = '''
<ul>
<li> item 1 </li>
<li> item 2 </li>
<li> item 3 </li>
</ul>
'''
dom = pq(html)
dom('li').each(lambda index, node: pq(node).attr(class_='red', x='123'))
print dom
Als ich es ausführte, wurden Klasse und mysteriöses Attribut x gesetzt.
<ul>
<li x="123" class="red"> item 1 </li>
<li x="123" class="red"> item 2 </li>
<li x="123" class="red"> item 3 </li>
</ul>
Sie können dasselbe mit dom ('li') und AddClass ('red') für class tun.
Ich habe ein Beispielprogramm erstellt, das auf eine Webseite zugreift und die URL eines Bildes extrahiert. Wählen Sie das img-Tag aus und greifen Sie mit .items () auf jedes Element zu.
img_scraper.py
#!/usr/bin/env python
from urlparse import urljoin
from pyquery import PyQuery as pq
from pprint import pprint
url = 'http://www.yahoo.co.jp'
dom = pq(url)
result = set()
for img in dom('img').items():
img_url = img.attr['src']
if img_url.startswith('http'):
result.add(img_url)
else:
result.add(urljoin(url, img_url))
pprint(result)
Das Ergebnis ist wie folgt
set(['http://i.yimg.jp/images/sicons/box16.gif',
'http://k.yimg.jp/images/clear.gif',
'http://k.yimg.jp/images/common/tv.gif',
'http://k.yimg.jp/images/icon/photo.gif',
'http://k.yimg.jp/images/new2.gif',
'http://k.yimg.jp/images/sicons/ybm161.gif',
'http://k.yimg.jp/images/top/sp/cgrade/iconMail.gif',
'http://k.yimg.jp/images/top/sp/cgrade/icon_point.gif',
'http://k.yimg.jp/images/top/sp/cgrade/info_btn-140325.gif',
'http://k.yimg.jp/images/top/sp/cgrade/logo7.gif',
'http://lpt.c.yimg.jp/im_sigg6mIfJALB8FuA5LAzp6.HPA---x120-y120/amd/20150208-00010001-dtohoku-000-view.jpg'])
Wenn Sie ein a-Tag anstelle des img-Tags auswählen und die Liste in Kombination mit gevent durchsuchen, können Sie in kürzester Zeit einen Crawler erstellen.
Ein Skript zum Scraping von Abschlüssen aus Google Finance. Da es lang ist, werde ich nur den Link zu Gist posten.
https://gist.github.com/knoguchi/6952087
Recommended Posts