zoukankan      html  css  js  c++  java
  • crawlspider

    Scrapy中CrawSpider

    回头看:

    之前的代码中,我们有很大一部分时间在寻找下一页的url地址或者是内容的url地址或者是内容的url地址上面,这个过程能更简单一些么?
    

    思路:

    1. 从response中提取所有的a标签对应的url地址     
    2. 自动的构造自己requests请求,发送给引擎  
    

    上面的功能可以做的更好:

    满足某个条件的url地址,我们才发送给引擎,同时能够指定callback函数

    需求:爬取csdn上面所有的博客专家及其文章

    url地址:http://blog.csdn.net/experts.html
    

    生产crawlspider的命令:

    scrapy genspider -t crawl csdn 'csdn.cn'
    
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    
    class CsdnspiderSpider(CrawlSpider):  # 继承自spiders的crawspider类
        name = 'csdnspider'
        allowed_domains = ['blog.csdn.net']
        start_urls = ['http://blog.csdn.net/peoplelist.html?channelid=0&page=1']  # 第一次请求的url,如果对这个url有特殊的需求,可以定义一个parse_start_url函数专门处理所有对应的响应
        
        rules = (
            Rule(LinkExtractor(allow=r"http://blog.csdn.net/w+$"), fllow=True),  # 能够找到所有作者的博客地址并且请求,$符号加上表示已w结尾,否则会匹配上w+'/abc/def'等内容
            Rule(LinkExtractor(allow=r"peoplelist.html?channelid=d+&page=d+$), follow=True),  #找到所有的翻页地址并且请求,$符合同理
            Rule(LinkExtractor(allow=r'/article/details/d+$'), callback="parse_article", follow=True),  # 找到所有的文章的url地址,并且请求,调用parase_article函数处理response
            Rule(LinkExtractor(allow=r'/article/list/d+$'), follow=True)
        )
    

    注意点:

    1. 用命令创建一个crawlspider模块:scrapy genspider -t crawl <爬虫名字> <all_domain>,也可以手动创建
    2. CrawlSpider中不能再有以parse为名字的数据提取方法,这个方法被CrawlSpider用来实现基础url提取等功能
    3. 一个Rule对象接收很多参数,首先第一个是包含url规则的LinkExtractor对象,常用的还有callback(制定满足规则的url的解析函数的字符串)和follow(response中提取的链接是否需要跟进)
    4. 不指定callback函数的请求下,如果follow为True,满足该rule的url还会继续被请求
    5. 如果多个Rule都满足某一个url,会从rules中选择第一个满足的进行操作

    CrawlSpider补充(了解)

    LinkExtractor更多常见参数:

    allow:满足括号中“正则表达式”的URL会被提取,如果为空,则全部匹配。
    deny:满足括号中“正则表达式”的URL一定不提取(优先级高于allow)
    allow_domains:会被提取的链接的domains。
    deny_domains:一定不会被提取链接的domains。
    restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接,级xpath满足范围内的url地址会被提取
    
    spiders.Rule常见参数:
    link_extractor:是一个LinkExtractor对象,用于定义需要提取的链接。
    callback:从linkExtractor中每获取链接时,参数所指定的值作为回调函数。
    follow:是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。如果callback为None,follow默认设置为True,否则默认为False。
    process_links:指定该spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数,该方法主要用来过滤url。
    process_request:指定该spider中哪个的函数将会被调用,该规则提取每个request时都会调用该函数,用来过滤request
  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/colden/p/9863776.html
Copyright © 2011-2022 走看看