python 파충류 프레임 워 크 talonspider 간단하게 소개

7162 단어 python파충 틀
1.이 걸 왜 써 요?
일부 간단 한 페이지 는 비교적 큰 틀 로 기어 오 르 지 않 아 도 되 고,자신 이 직접 쓰 는 것 도 비교적 번거롭다.
그래서 이 수요 에 대해 talonspider 를 썼 습 니 다.
•1.단일 페이지 에 대한 아 이 템 추출-구체 적 인 소개 점여기,이곳
•2.spider 모듈-구체 적 인 소개 점여기,이곳
2.소개&사용
2.1.item
이 모듈 은 독립 적 으로 사용 할 수 있 습 니 다.일부 요청 이 비교적 간단 한 사이트(예 를 들 어 get 요청 만 필요 합 니 다)에 대해 서 는 이 모듈 만으로 원 하 는 파충 류 를 빠르게 작성 할 수 있 습 니 다.예 를 들 어(아래 는 python 3,python 2 는 examples 디 렉 터 리 참조):
2.1.1.단일 페이지 단일 목표
예 를 들 어 이 주 소 를 가 져 오 려 면http://book.qidian.com/info/1004608738 의 책 정보,표지 등 정 보 는 직접 이렇게 쓸 수 있다.

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

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

  def tal_title(self, title):
    return title

  def tal_cover(self, cover):
    return 'http:' + cover

if __name__ == '__main__':
  item_data = TestSpider.get_item(url='http://book.qidian.com/info/1004608738')
  pprint(item_data)

구체 적 으로 보면qidian_details_by_item.py
2.1.1.단일 페이지 다목 적
예 를 들 어 콩잎 250 영화 의 첫 페이지 에 전 시 된 25 편의 영 화 를 가 져 오 면 이 페이지 는 25 개의 목표 가 있 고 이렇게 쓸 수 있다.

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

#      item    
class DoubanSpider(Item):
  target_item = TextField(css_select='div.item')
  title = TextField(css_select='span.title')
  cover = AttrField(css_select='div.pic>a>img', attr='src')
  abstract = TextField(css_select='span.inq')

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

if __name__ == '__main__':
  items_data = DoubanSpider.get_items(url='https://movie.douban.com/top250')
  result = []
  for item in items_data:
    result.append({
      'title': item.title,
      'cover': item.cover,
      'abstract': item.abstract,
    })
  pprint(result)

구체 적 으로 보면douban_page_by_item.py
2.2.spider
층 이 있 는 페이지 를 올 라 가 야 할 때,예 를 들 어 콩잎 250 개의 모든 영 화 를 올 라 가 야 할 때,spider 부분 은 도움 이 된다.

# !/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='div.item')
  title = TextField(css_select='span.title')
  cover = AttrField(css_select='div.pic>a>img', attr='src')
  abstract = TextField(css_select='span.inq')

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


class DoubanSpider(Spider):
  #     url,  
  start_urls = ['https://movie.douban.com/top250']
  # requests  
  request_config = {
    'RETRIES': 3,
    'DELAY': 0,
    'TIMEOUT': 20
  }
  #         
  def parse(self, html):
    #  html   etree
    etree = self.e_html(html)
    #          url
    pages = [i.get('href') for i in etree.cssselect('.paginator>a')]
    pages.insert(0, '?start=0&filter=')
    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({
      #   'title': item.title,
      #   'cover': item.cover,
      #   'abstract': item.abstract,
      # })
      #   
      with open('douban250.txt', 'a+') as f:
        f.writelines(item.title + '
') if __name__ == '__main__': DoubanSpider.start()
콘 솔:

/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

현재 디 렉 터 리 는 douban 250.txt 를 생 성 합 니 다.구체 적 으로douban_page_by_spider.py참조.
3.설명
학습 작품,보완 해 야 할 부분 이 많 습 니 다.의견 제출 을 환영 합 니 다.프로젝트 주소talonspider.

좋은 웹페이지 즐겨찾기