2018-09-05 scrapy-spider(二)

    开始介绍crawl模块

    该模块用于爬去有规律的网站贼好用。比如(知乎,51job,智联招聘等)

    scrapy genspider -t crawl crawlspider xxx.com

    name allowed_domains start_urls都和basic的差不多。我重点介绍一下rules,顺带说一下,parse_item函数是不能随便重写的啊喂,不能写个parse函数的!

    介绍Rule不得不提到 LinkExtractor

    通过规定规则,我们可以通过LinkExtractor很轻易的取得在这个站,你想要的连接。

    因为不规定规则,那么LinkExtractor返回的全站的链接

    LinkExtractor参数

    allow 接受一个正则表达式,或者正则表达式列表,提取与正则表达式相匹配的链接,如果为空默认是全部链接

    allow_domains 接受一个域名列表,提取到制定与的链接

    deny_domains  与allow_domains相反

    restrict_paths 接受一个xpath表达式或者xpath表达式列表,提取xpaht表达式选中的区域下的链接

    restrict_css 接受一个css选择器或者css选择器列表,提取css选择器选中区域下的链接

    tags 接受一个标签(标签列表),提取指定标签内的链接

    attrs 接受一个属性(属性列表)提取指定属性的链接

    proces_value 接受一个回调函数,如果传递参数,这个回调函数将对每一个链接进行处理

    通过以上的参数我们就成功接受到一个LinkExtractor对象了

    就想正则表达式的compile对象一样,我对这个LInkExtractor的理解就是一种规则

    然而,我们并没有传递要让他使用这种规则的response

    这里,我们可以通过函数extract_links 传入response,然这个规则去解析这个response

    返回的是一个列表(符合条件的链接都会被放入这个列表)

    介绍ok之后我们了解一下rules

    rules是Rule的集合

    Rule代表的是一种取链接的规则下面主要介绍他的三个参数

    Rule(LinkExtractor(),callback=,follow)

    LinkExtractor上文介绍过了,他规定了我们接受怎么样的链接

    callback则是让符合的链接传递给符合的解析函数,在crawlspider中,不同的链接给与不同的解析函数

    follow 是否对子链接进行爬取。大概的意思是,如果follow = True,那么,通过这个Rule规则的

    链接,会再一次进入rules的筛选规则。

    我们举个例子:

    rules = {

    Rule1,

    Rule2,

    }

    如果Rule2的follow = True

    那么符合Rule2的链接,比如link1,scrapy会打开这个link1并且提取全站链接,再一次进入

    rules筛选,如果又有符合Rule2且没有被爬去过的链接,会再一次被访问并提取全站链接

    用rules过滤,有点无限递归的意思

你可能感兴趣的:(2018-09-05 scrapy-spider(二))