Scrapy笔记(7)- 内置服务
来源:互联网 发布:xampp ubuntu安装 编辑:程序博客网 时间:2024/06/06 00:58
Scrapy使用Python内置的的日志系统来记录事件日志。日志配置
LOG_ENABLED = trueLOG_ENCODING = "utf-8"LOG_LEVEL = logging.INFOLOG_FILE = "log/spider.log"LOG_STDOUT = TrueLOG_FORMAT = "%(asctime)s [%(name)s] %(levelname)s: %(message)s"LOG_DATEFORMAT = "%Y-%m-%d %H:%M:%S"
使用也很简单
import logginglogger = logging.getLogger(__name__)logger.warning("This is a warning")
如果在Spider里面使用,那就更简单了,因为logger就是它的一个实例变量
import scrapyclass MySpider(scrapy.Spider): name = 'myspider' start_urls = ['http://scrapinghub.com'] def parse(self, response): self.logger.info('Parse function called on %s', response.url)
发送email
Scrapy发送email基于Twisted non-blocking IO实现,只需几个简单配置即可。
初始化
mailer = MailSender.from_settings(settings)
发送不包含附件
mailer.send(to=["someone@example.com"], subject="Some subject", body="Some body", cc=["another@example.com"])
配置
MAIL_FROM = 'scrapy@localhost'MAIL_HOST = 'localhost'MAIL_PORT = 25MAIL_USER = ""MAIL_PASS = ""MAIL_TLS = FalseMAIL_SSL = False
同一个进程运行多个Spider
import scrapyfrom scrapy.crawler import CrawlerProcessclass MySpider1(scrapy.Spider): # Your first spider definition ...class MySpider2(scrapy.Spider): # Your second spider definition ...process = CrawlerProcess()process.crawl(MySpider1)process.crawl(MySpider2)process.start() # the script will block here until all crawling jobs are finished
分布式爬虫
Scrapy并没有提供内置的分布式抓取功能,不过有很多方法可以帮你实现。
如果你有很多个spider,最简单的方式就是启动多个Scrapyd
实例,然后将spider分布到各个机器上面。
如果你想多个机器运行同一个spider,可以将url分片后交给每个机器上面的spider。比如你把URL分成3份
http://somedomain.com/urls-to-crawl/spider1/part1.listhttp://somedomain.com/urls-to-crawl/spider1/part2.listhttp://somedomain.com/urls-to-crawl/spider1/part3.list
然后运行3个Scrapyd
实例,分别启动它们,并传递part参数
curl http://scrapy1.mycompany.com:6800/schedule.json -d project=myproject -d spider=spider1 -d part=1curl http://scrapy2.mycompany.com:6800/schedule.json -d project=myproject -d spider=spider1 -d part=2curl http://scrapy3.mycompany.com:6800/schedule.json -d project=myproject -d spider=spider1 -d part=3
防止被封的策略
一些网站实现了一些策略来禁止爬虫来爬取它们的网页。有的比较简单,有的相当复杂,如果你需要详细了解可以咨询商业支持
下面是对于这些网站的一些有用的建议:
- 使用user agent池。也就是每次发送的时候随机从池中选择不一样的浏览器头信息,防止暴露爬虫身份
- 禁止Cookie,某些网站会通过Cookie识别用户身份,禁用后使得服务器无法识别爬虫轨迹
- 设置download_delay下载延迟,数字设置为5秒,越大越安全
- 如果有可能的话尽量使用Google cache获取网页,而不是直接访问
- 使用一个轮转IP池,例如免费的Tor project或者是付费的ProxyMesh
- 使用大型分布式下载器,这样就能完全避免被封了,只需要关注怎样解析页面就行。一个例子就是Crawlera
如果这些还是无法避免被禁,可以考虑商业支持
0 0
- Scrapy笔记(7)- 内置服务
- 4、scrapy内置服务
- 2.5 scrapy的内置服务介绍
- scrapy文档学习笔记(scrapy tutorial)
- Scrapy学习笔记(1)初探Scrapy
- Scrapy学习笔记(0)---Scrapy一瞥
- angularJS(三)内置服务
- Scrapy学习笔记(二)
- Scrapy学习笔记(三)
- Scrapy笔记(9)- 部署
- Learning Scrapy 笔记(1)
- Scrapy爬虫笔记【7-Scrapy核心知识基础】
- scrapy学习--内置Spiders简介
- scrapy学习笔记--scrapy命令
- Angular(四)内置服务$http
- Scrapy框架学习笔记(一)
- Scrapy笔记(1)- 入门篇
- Scrapy笔记(2)- 完整示例
- C++虚函数到底需要实现吗?
- FFmpeg的Android打印
- RabbitMQ (五)主题(Topic)
- angularjs $resource请求类型和请求参数
- 沉浸式状态栏的实现和版本兼容
- Scrapy笔记(7)- 内置服务
- 获取easyui-datagrid中选中的数据,并遍历得到目标数据
- PyCharm2016.2专业版注册码
- Python基础学习--第四篇(条件判断和循环)
- 某处有某物
- 搞懂JAVA集合类--HashTable, LinkedHashMap, TreeMap(四)
- Codeforces 268C Beautiful Sets of Points【思维】
- Android广播接收 BroadcastReceiver监听系统全局的Broadcast消息
- python @staticmethod @classmethod 区别