美文网首页python-ScrapyPythoner集中营生活不易 我用python
Python学习日记11|Scrapy入门时的几个坑

Python学习日记11|Scrapy入门时的几个坑

作者: 是蓝先生 | 来源:发表于2016-05-16 16:26 被阅读655次

    今天是5.16号。

    看的课程里面关于Scrapy讲的内容直接用到了redis这个数据库,有了解到redis和mongodb一样是一种key-value数据库,不过mongodb是将数据放在硬盘中的,而redis是将数据库放在内存中的,所以读或者存储数据更快。

    但目前对于scrapy好像还没有入门,所以还是先主要学习scrapy爬虫框架相关知识。从上周五开始就在学习scrapy,但真的是如其他人所说这里面坑真心多,今天终于有了一点进展,对这两天的知识进行总结。


    一、Scrapy必须搭载python2.7使用!

    刚开始自己用的python3.4版本,然后傻傻的照着找来的教程安装相关的库,写好简单的代码,结果运行就报错,发现有些库是不支持python3以上的版本的,只好又安装了2.7的版本。

    二、关于scrapy的安装

    (1).下面是所有要安装的库


    1.png

    有一点要注意,在pycharm的interpreter中安装库时,不要把下面所示的选项选中,不然会把库装到其他路径下。

    2.png

    (2).安装好上面这些库之后,由于scrapy不像以往的用单个py文件来可以运行,所以必须先创建一个工程,在PycharmProjects文件下,打开cmd输入如下命令:

    scrapy startproject namexx
    

    这样就建立好了相应的工程,里面自动生成好几个文件,各个文件具体什么功能可以自行查询。接着是去建立新的文件编写对应的代码,但由出现了各种其他的问题。

    三、关于主要的文件中继承的类和对应的xpath的使用

    上面的两个问题解决后,发现依然print不出自己想要的内容,然后发现编写代码时,有几个问题又出现了。

    __author__ = 'guohuaiqi'
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    
    # from scrapy.spider import BaseSpider
    # class DoubanFilm(BaseSpider):
    
    import scrapy
    class DoubanFilm(scrapy.Spider):
        name = "tb"
        allowed_domains = ["baidu.com"]
        start_urls = ["http://tieba.baidu.com/p/4550405727"]
    
        def parse(self, response):
            item=response.xpath('//*[@id="j_core_title_wrap"]/div[2]/h1').extract()
            print item[0]
    #可以由response.body得到返回网页的整体内容,response.url得到请求的url,
    response.xpath('xx')获取相应的页面元素。
    
    所有的代码写好后,在pycharm的console中运行如下命令即可:
    scrapy crawl tb
    

    (1)导入库的问题
    自己对着极客学院里面scrapy的教程往上码好代码,结果发现有的教程导入的是BaseSpider,有的是Crawlspider,有的直接就是scrapy。到后来改来改去,才发现好像scrapy和BaseSpider是一样的,而Crawlspider则要在后面配合rule使用。

    (2)继承类的问题
    如上面的例子所示,scrapy和BaseSpider的用法其实是差不多的,然后自己就以导入scrapy进行了后续的过程。当然是如果使用Crawlspider也是可以的,但自己没有学会它与rule配合使用的用法,所以会在后面继续学习。但是建议如果是初学者还是直接用scrapy简便一点。

    同时在定义类时,必须要有的几个关键字不能少:
    a).name,在写完代码后,运行爬虫时需要用到;
    b).allowed_domains ,一般就是网站域名出去www后的字符,有时候不加上这条语句会显示不了,但有时又正常,所以还是带上的好;
    c).start_urls ,用于说明爬虫的起始入口;

    在定义完属性后,然后必须定义一个名为parse(self,response)的函数,接着根据自己的功能需求去编写。

    (3)Xpath的使用的问题
    上面所有的问题都解决后,怎样提取到网页中对应的元素或者属性,必须要了解XPath的用法,否则仍然不会显示任何内容。自己最初想试试能不能在里面有besutifulsoup的方法去获取想要的内容,但发现几乎没有将besutifulsoup与scrapy相结合应用来获取元素的文章,也可能是自己没有找到。所以在学习scrapy前一定要先了解一下xpath的相关知识。

    (4)其他问题
    a).用python3及以上版本print时,中文会正常显示,而2中则会显示为unicode字符;
    b)有些网站能用besutifulsoup的select来直接获取元素,但是用xpath居然会显示403错误,也是醉了。


    附上利用XPath定位到网页中指定元素的方法,与besutifulsoup的方法想类似。

    XPath相关知识1.png XPath相关知识2.png XPath相关知识3.png XPath相关知识4.png XPath相关知识5.png

    (有关xpath深入了解的文章,在简书上看到了一篇觉得好不错,附上链接:http://www.jianshu.com/p/89c10770d72c

    不知道什么时候能够学完scrapy的相关知识,但是真心觉得好累,等学完scrapy自己就要开始考虑读博,以及去研究老师前天发给自己的博士论文了。

    anyway,加油!

    相关文章

      网友评论

        本文标题:Python学习日记11|Scrapy入门时的几个坑

        本文链接:https://www.haomeiwen.com/subject/wkxmrttx.html