pythonspider哪个版本好_Python学习日记11|Scrapy入门时的几个坑

今天是5.16号。

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

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

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

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

二、关于scrapy的安装

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

f2998fc92f16

1.png

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

f2998fc92f16

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的方法想类似。

f2998fc92f16

XPath相关知识1.png

f2998fc92f16

XPath相关知识2.png

f2998fc92f16

XPath相关知识3.png

f2998fc92f16

XPath相关知识4.png

f2998fc92f16

XPath相关知识5.png

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

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

anyway,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值