基于scrapy可见可得的爬虫工具arachnado
【摘要】 效果预览和项目所在
先上Git地址:https://github.com/TeamHG-Memex/arachnado
这个库在去年8月就已经上线了,作者写的东西和整体的UI界面满不错的,
这是从youtube下载下来后上传到youku的演示效果
整体的效果确实真的很不错,基于tornado 高效,封装了一些scrapyd webservice 的api,数据...
效果预览和项目所在
先上Git地址:https://github.com/TeamHG-Memex/arachnado
这个库在去年8月就已经上线了,作者写的东西和整体的UI界面满不错的,
这是从youtube下载下来后上传到youku的演示效果
整体的效果确实真的很不错,基于tornado 高效,封装了一些scrapyd webservice 的api,数据都是保存在mongo之中的,可以自己自由定制,不过可惜的是,目前只能通过修改spider里面的代码来个性爬虫的整体逻辑,不过代码逻辑不复杂,可以学习自己封装一些api .
关于定制spider ,是否任何网站都可以爬取
https://github.com/TeamHG-Memex/arachnado/blob/master/arachnado/spider.py
class ArachnadoSpider(scrapy.Spider): """ A base spider that contains common attributes and utilities for all Arachnado spiders """ crawl_id = None domain = None motor_job_id = None def __init__(self, *args, **kwargs): super(ArachnadoSpider, self).__init__(*args, **kwargs) # don't log scraped items logging.getLogger("scrapy.core.scraper").setLevel(logging.INFO) def get_page_item(self, response, type_='page'): return { 'crawled_at': datetime.datetime.utcnow(), 'url': response.url, 'status': response.status, 'headers': response.headers, 'body': response.body_as_unicode(), 'meta': response.meta, '_type': type_, } class CrawlWebsiteSpider(ArachnadoSpider): """ A spider which crawls all the website. To run it, set its ``crawl_id`` and ``domain`` arguments. """ name = 'crawlwebsite' custom_settings = { 'DEPTH_LIMIT': 10, } def __init__(self, *args, **kwargs): super(CrawlWebsiteSpider, self).__init__(*args, **kwargs) self.start_url = add_scheme_if_missing(self.domain) def start_requests(self): self.logger.info("Started job %s#%d for domain %s", self.motor_job_id, self.crawl_id, self.domain) yield scrapy.Request(self.start_url, self.parse_first, dont_filter=True) def parse_first(self, response): # If there is a redirect in the first request, use the target domain # to restrict crawl instead of the original. self.domain = get_netloc(response.url) self.crawler.stats.set_value('arachnado/start_url', self.start_url) self.crawler.stats.set_value('arachnado/domain', self.domain) allow_domain = self.domain if self.domain.startswith("www."): allow_domain = allow_domain[len("www."):] self.get_links = LinkExtractor( allow_domains=[allow_domain] ).extract_links for elem in self.parse(response): yield elem def parse(self, response): if not isinstance(response, HtmlResponse): self.logger.info("non-HTML response is skipped: %s" % response.url) return yield self.get_page_item(response) for link in self.get_links(response): yield scrapy.Request(link.url, self.parse)
其实是将数据一些常见的链接抓出来了,并没有对特定的数据进行处理
数据如何处理
数据都是经过piepline来处理的,可以查看代码
https://github.com/TeamHG-Memex/arachnado/blob/master/arachnado/motor_exporter/pipelines.py
存入到mongodb ,数据拿到后的样子
文章来源: brucedone.com,作者:大鱼的鱼塘,版权归原作者所有,如需转载,请联系作者。
原文链接:brucedone.com/archives/496
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)