Heim > Artikel > Backend-Entwicklung > Eine kurze Einführung in das Crawler-Framework (Talonspider) in Python
Dieser Artikel stellt Ihnen eine kurze Einführung und Verwendungsmethode des Crawler-Frameworkstalonspider vor, das mit Python entwickelt wurde. Freunde in Not können sich auf
beziehen 1. Warum das schreiben?
Für einige einfache Seiten ist es nicht erforderlich, ein relativ großes Framework zum Crawlen zu verwenden. Es wäre mühsam, sie von Hand zu schreiben.
Deshalb habe ich Talonspider geschrieben Anforderung:
•1. Extraktion von Elementen aus einer einzelnen Seite – für eine detaillierte Einführung klicken Sie hier
•2. Spider-Modul – für eine detaillierte Einführung klicken Sie hier
2. Einführung && Verwendung
2.1.item
Für einige Websites mit relativ einfachen Anfragen (z. B. nur Get-Anfragen) können Sie Mit diesem Modul können Sie beispielsweise schnell schreiben, was Sie möchten (verwenden Sie Python3 unten, siehe Beispielverzeichnis für Python2):
Einzelseitiges Einzelziel
Zum Beispiel. um diese URL zu erhalten http://book.qidian.com/ Die Buchinformationen, das Cover und andere Informationen von info/1004608738 können direkt wie folgt geschrieben werden:
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)
Weitere Informationen finden Sie unter qidian_details_by_item.py
2.1. Mehrere Ziele auf einer einzigen Seite
Wenn Sie beispielsweise die 25 Filme auf der Homepage von Douban 250 Movies angezeigt bekommen , diese Seite hat 25 Ziele. Sie können es direkt so schreiben:
from talonspider import Item, TextField, AttrField from pprint import pprint # 定义继承自item的爬虫类 class DoubanSpider(Item): target_item = TextField(css_select='p.item') title = TextField(css_select='span.title') cover = AttrField(css_select='p.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='movie.douban.com/top250') result = [] for item in items_data: result.append({ 'title': item.title, 'cover': item.cover, 'abstract': item.abstract, }) pprint(result)
Weitere Informationen finden Sie unter douban_page_by_item.py
2.2 .spider
Wenn Sie hierarchische Seiten crawlen müssen, beispielsweise alle Douban 250-Filme, dann ist der Spider-Teil praktisch:
# !/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='p.item') title = TextField(css_select='span.title') cover = AttrField(css_select='p.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 + '\n') if name == 'main': DoubanSpider.start()
Konsole:
/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
Zu diesem Zeitpunkt wird douban250.txt im aktuellen Verzeichnis generiert. Weitere Informationen finden Sie unter douban_page_by_spider.py.
3. Beschreibung
Dies ist eine Studienarbeit. Es gibt noch viele Bereiche, die verbessert werden müssen. Die Projektadresse ist talonspider.
Das obige ist der detaillierte Inhalt vonEine kurze Einführung in das Crawler-Framework (Talonspider) in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!