CrawlSpiders类:深入爬取
创建爬虫:
scrapy genspider -t crawl tencent tencent.com
# 匹配链接
from scrapy.linkextractors import LinkExtractor
link_list = LinkExtractor(allow=("start=\d+"))
# 处理链接,拿出response所有匹配到的链接
link_list.extract_links(response)
allow:符合就提取
deny:不符合就提取
deny_domains:一定不会匹配
rules:
link_extractor:是一个link extractor对象,用于需要定义需要提取的链接
callback:从link_extractor中每获取到链接时,参数所指定的值作为回调函数,改回调函数接受一个response作为其第一个参数
当编写爬虫规则时,避免使用parse作为回调函数,由于CrawlSpider使用parse方法来实现其逻辑,如果覆盖了parse方法,将会运行失败
follow:是一个布尔值,指定了根据该规则从response提取的链接是否需要跟进,如果callback为None,follow默认为True
class TencentSpider(CrawlSpider): name = "tencent" allow_domains = ["hr.tencent.com"] start_urls = ["http://hr.tencent.com/position.php?&start0#a"] pagelink = LinkExtractor(allow=("start=\d+")) # 提取链接 rules = [ Rule(pagelink,callback="parseTent",follow=True) ] def parseTencent(self,response): pass
scrapy提供了log功能,可以通过logging模块使用
修改配置文件settings.py:
LOG_fILE = "TencentSpider.log"
LOG_LEVEL = "INFO"
Log levels:
-
Scrapy提供5层logging级别:
-
CRITICAL - 严重错误(critical)
- ERROR - 一般错误(regular errors)
- WARNING - 警告信息(warning messages)
- INFO - 一般信息(informational messages)
- DEBUG - 调试信息(debugging messages)
LOG_ENABLED
默认: True,启用loggingLOG_ENCODING
默认: 'utf-8',logging使用的编码LOG_FILE
默认: None,在当前目录里创建logging输出文件的文件名LOG_LEVEL
默认: 'DEBUG',log的最低级别LOG_STDOUT
默认: False 如果为 True,进程所有的标准输出(及错误)将会被重定向到log中。例如,执行 print "hello" ,其将会在Scrapy log中显示。
CrawlSpiders类比Spiders类多了自动获取link。