python爬虫

资料:
    1.小白进阶之Scrapy第一篇
        https://cuiqingcai.com/3472.html
    2.Scrapy入门教程
        http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html#id2
    3.B站  --Python网络爬虫实战 Scrapy
        https://www.bilibili.com/video/av7635196/?p=5
    4.scrapy-redis介绍(一)
        https://blog.csdn.net/hjhmpl123/article/details/53292602


安装:
    略,在python找

快捷键
    Ctrl+Shift+d肆
    




过程:
    1.scrapy项目创建
        scrapy startproject XXXXX             XXXXX代表你项目的名字
            结构:
                scrapy.cfg: 项目的配置文件
                xxxx/: 该项目的python模块。之后您将在此加入代码。
                xxxx/items.py: 项目中的item文件.
                xxxx/pipelines.py: 项目中的pipelines文件.
                xxxx/settings.py: 项目的设置文件.
                xxxx/spiders/: 放置spider代码的目录.
    2.scrapy shell    #参考: https://segmentfault.com/a/1190000013199636?utm_source=tag-newest
                    # https://www.cnblogs.com/zhaof/p/7189860.html
        在shell使用选择器,便于获取xpath,可以配合网页路径
            scrapy shell "http://www.itcast.cn/channel/teacher.shtml"
        
    3.Feed exports:
        最简单存储爬取的数据的方式是使用        
            scrapy crawl dmoz -o items.json
            该命令将采用 JSON 格式对爬取的数据进行序列化,生成 items.json 文件。
    4.通用爬虫(Broad Crawls)
        
    5.获取标签下多层结构所有文本  #参考: https://blog.csdn.net/zhengxiangwen/article/details/73865267
        response.xpath('//div[@class="post-full-text contents"]//text()').extract()
        
        
        
scrapy执行流程        
        ...
        
        
基类scrapy.Spider介绍
    属性:
        name:  #要求唯一
        allowed_domains: #允许域名
        start_urls: 
        custom_settings:个性化设置,会覆盖全局的设置
        crawler:抓取器,spider将绑定到上面
        settings:配置实例,包含工程中所有的配置变量
        logger:日志实例
    方法:
        from_crawler  :类方法,创建spider
        start_requests():生成初始requests
        make_requests_from_url(url):根据url生成一个request
        parse(requests):解析网页内容
        log(message[,level,component]):记录日志,
        self.logger.info("visited success")
        closed(reason):当spider关闭时候跳跃的方法
    
子类:
    CrawlSpider:最常见的spider,用来抓取普通网页
                比起基类增加2个成员,
                rules:定义了抓取规则--连接怎么跟踪,使用哪一个parse函数解析此连接
                parse_start_url(response):解析初始url的相应
    XMLFeedSpider: #下面的类不写了,放不进嘴里,根本不用嚼
    ...
    

request参数:    #https://www.cnblogs.com/thunderLL/p/6551641.html
    callback:回调
    url:  #在这里卡住了,因为要的是str,我传入的是队列
    meta(dict):指定Request.meta属性的初始值。
    method(string):HTTP请求的方法,默认为GET
    
    
    
    
命令:
    scrapy startproject XXXXX   #创建项目
    scrapy crawl csdn -o items.json #执行存储json数据  
    
选择器:
    response.xpath('//ol/li').xpath('@data-item-id').extract()[0]
    response.xpath('//article/h1/text()').extract()[0]
    response.css('p.TweetTextSize.TweetTextSize--normal.js-tweet-text.tweet-text::text').extract()
    response.xpath('//ol/li').css('p.TweetTextSize.TweetTextSize--normal.js-tweet-text.tweet-text *::text').extract()
    
    
scrapy_redis 分布式抓取 






问题:
    1.在windows环境,运行项目出现 ModuleNotFoundError: No module named 'win32api' 错误
        #https://blog.csdn.net/little_sow/article/details/46408931
        原因:少pywin32库, 下载安装正常






命令语句:
    保存到文件
        filename = response.url.split("/")[-2]
        with open(filename, 'wb') as f:
            f.write(response.body) 
    
    
原文地址:https://www.cnblogs.com/jiuya/p/9455174.html