PyQuery
Python a un module pratique appelé PyQuery qui fournit une API de type jQuery. Beautiful Soup semble être populaire dans les rues, mais PyQuery est définitivement plus facile à utiliser. Puisque la base est lxml, je pense que les performances et la fiabilité sont également garanties.
Si vous transmettez l'url au constructeur, il la récupérera pour vous. Vous pouvez également transmettre des chaînes HTML ou des objets fichier. Après cela, si vous spécifiez une chaîne de caractères similaire au sélecteur jQuery, vous pouvez obtenir tous les éléments correspondants.
Il est également possible d'exploiter chaque élément en passant une expression ou une fonction lambda. Si vous connaissez jQuery, vous pouvez imaginer ce que vous pouvez faire. Veuillez consulter le Manuel pour plus de détails!
Donnez des attributs à l'élément sélectionné avec la méthode .each (). class
est un mot réservé en Python, donc si vous le définissez sur class_
, ce sera une classe HTML.
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
Quand je l'ai exécuté, la classe et l'attribut mystérieux x ont été définis.
<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>
Vous pouvez faire la même chose avec dom ('li'). AddClass ('red') pour la classe.
J'ai créé un exemple de programme qui accède à une page Web et extrait l'URL d'une image. Sélectionnez la balise img et accédez à chaque élément avec .items ().
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)
Le résultat est le suivant
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'])
Si vous sélectionnez la balise a au lieu de la balise img et recherchez dans la liste en combinaison avec gevent, vous pouvez créer un robot d'exploration en un rien de temps.
Un script pour extraire les états financiers de Google Finance. Comme il est long, je posterai uniquement le lien vers Gist.
https://gist.github.com/knoguchi/6952087
Recommended Posts