Maison >développement back-end >Tutoriel Python >Une brève introduction au framework d'exploration (talonspider) en Python

Une brève introduction au framework d'exploration (talonspider) en Python

零下一度
零下一度original
2017-06-19 15:24:591586parcourir

Cet article vous présente une brève introduction et la méthode d'utilisation du crawler frameworktalonspider développé à l'aide de python Les amis dans le besoin peuvent se référer à

. 1. Pourquoi écrire ceci ?

Pour certaines pages simples, il n'est pas nécessaire d'utiliser un framework relativement volumineux pour les explorer. Il serait gênant de les écrire à la main

J'ai donc écrit Talonspider pour cela. exigence :

•1. Extraction d'éléments à partir d'une seule page - cliquez ici pour une introduction détaillée
•2. Module Spider - cliquez ici pour une introduction détaillée

<.>2. Introduction && utilisation

2.1.item

Ce module peut être utilisé indépendamment Pour certains sites Web avec des requêtes relativement simples (comme uniquement obtenir des requêtes), vous pouvez rapidement. écrivez ce que vous voulez en utilisant ce module seul, par exemple (utilisez python3 ci-dessous, voir le répertoire d'exemples pour python2) :

2.1.1 Cible unique d'une seule page

Par exemple, pour obtenir. cette URL http://book.qidian.com/ Les informations sur le livre, la couverture et autres informations de info/1004608738 peuvent être écrites directement comme ceci :



import time
from talonspider import Item, TextField, AttrField
from pprint import pprint

class TestSpider(Item):
  title = TextField(css_select=&#39;.book-info>h1>em&#39;)
  author = TextField(css_select=&#39;a.writer&#39;)
  cover = AttrField(css_select=&#39;a#bookImg>img&#39;, attr=&#39;src&#39;)

  def tal_title(self, title):
    return title

  def tal_cover(self, cover):
    return &#39;http:&#39; + cover

if name == &#39;main&#39;:
  item_data = TestSpider.get_item(url=&#39;http://book.qidian.com/info/1004608738&#39;)
  pprint(item_data)
Pour plus de détails, voir qidian_details_by_item.py

2.1. 1. Plusieurs objectifs sur une seule page

Par exemple, pour obtenir les 25 films affichés sur la page d'accueil de Douban 250 Movies, cette page a 25 objectifs Vous pouvez écrire directement comme ceci :



from talonspider import Item, TextField, AttrField
from pprint import pprint

# 定义继承自item的爬虫类
class DoubanSpider(Item):
  target_item = TextField(css_select=&#39;p.item&#39;)
  title = TextField(css_select=&#39;span.title&#39;)
  cover = AttrField(css_select=&#39;p.pic>a>img&#39;, attr=&#39;src&#39;)
  abstract = TextField(css_select=&#39;span.inq&#39;)

  def tal_title(self, title):
    if isinstance(title, str):
      return title
    else:
      return &#39;&#39;.join([i.text.strip().replace(&#39;\xa0&#39;, &#39;&#39;) for i in title])

if name == &#39;main&#39;:
  items_data = DoubanSpider.get_items(url=&#39;movie.douban.com/top250&#39;)
  result = []
  for item in items_data:
    result.append({
      &#39;title&#39;: item.title,
      &#39;cover&#39;: item.cover,
      &#39;abstract&#39;: item.abstract,
    })
  pprint(result)
Pour plus de détails, voir douban_page_by_item.py

2.2.spider

Lorsque vous devez explorer des pages hiérarchiques, comme explorer tous les films Douban 250, la partie araignée est utile :



# !/usr/bin/env python
from talonspider import Spider, Item, TextField, AttrField, Request
from talonspider.utils import get_random_user_agent


# 定义继承自item的爬虫类
class DoubanItem(Item):
  target_item = TextField(css_select=&#39;p.item&#39;)
  title = TextField(css_select=&#39;span.title&#39;)
  cover = AttrField(css_select=&#39;p.pic>a>img&#39;, attr=&#39;src&#39;)
  abstract = TextField(css_select=&#39;span.inq&#39;)

  def tal_title(self, title):
    if isinstance(title, str):
      return title
    else:
      return &#39;&#39;.join([i.text.strip().replace(&#39;\xa0&#39;, &#39;&#39;) for i in title])


class DoubanSpider(Spider):
  # 定义起始url,必须
  start_urls = [&#39;https://movie.douban.com/top250&#39;]
  # requests配置
  request_config = {
    &#39;RETRIES&#39;: 3,
    &#39;DELAY&#39;: 0,
    &#39;TIMEOUT&#39;: 20
  }
  # 解析函数 必须有
  def parse(self, html):
    # 将html转化为etree
    etree = self.e_html(html)
    # 提取目标值生成新的url
    pages = [i.get(&#39;href&#39;) for i in etree.cssselect(&#39;.paginator>a&#39;)]
    pages.insert(0, &#39;?start=0&filter=&#39;)
    headers = {
      "User-Agent": get_random_user_agent()
    }
    for page in pages:
      url = self.start_urls[0] + page
      yield Request(url, request_config=self.request_config, headers=headers, callback=self.parse_item)

  def parse_item(self, html):
    items_data = DoubanItem.get_items(html=html)
    # result = []
    for item in items_data:
      # result.append({
      #   &#39;title&#39;: item.title,
      #   &#39;cover&#39;: item.cover,
      #   &#39;abstract&#39;: item.abstract,
      # })
      # 保存
      with open(&#39;douban250.txt&#39;, &#39;a+&#39;) as f:
        f.writelines(item.title + &#39;\n&#39;)


if name == &#39;main&#39;:
  DoubanSpider.start()
Console :



/Users/howie/anaconda3/envs/work3/bin/python /Users/howie/Documents/programming/python/git/talonspider/examples/douban_page_by_spider.py
2017-06-07 23:17:30,346 - talonspider - INFO: talonspider started
2017-06-07 23:17:30,693 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250
2017-06-07 23:17:31,074 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=25&filter=
2017-06-07 23:17:31,416 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=50&filter=
2017-06-07 23:17:31,853 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=75&filter=
2017-06-07 23:17:32,523 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=100&filter=
2017-06-07 23:17:33,032 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=125&filter=
2017-06-07 23:17:33,537 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=150&filter=
2017-06-07 23:17:33,990 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=175&filter=
2017-06-07 23:17:34,406 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=200&filter=
2017-06-07 23:17:34,787 - talonspider_requests - INFO: GET a url: https://movie.douban.com/top250?start=225&filter=
2017-06-07 23:17:34,809 - talonspider - INFO: Time usage:0:00:04.462108

Process finished with exit code 0
À ce moment, douban250.txt sera généré dans le répertoire actuel. Pour plus de détails, voir douban_page_by_spider.py.

3. Description

Il s'agit d'un travail d'étude Il y a encore de nombreux points à améliorer. Les commentaires sont les bienvenus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn