今天是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,加油!