python 파충류 프레임 워 크 talonspider 간단하게 소개
일부 간단 한 페이지 는 비교적 큰 틀 로 기어 오 르 지 않 아 도 되 고,자신 이 직접 쓰 는 것 도 비교적 번거롭다.
그래서 이 수요 에 대해 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.py2.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.py2.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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.