Scrapy爬虫框架入门教程(1)——爬取廖雪峰老师的博客

Scrapy爬虫框架入门教程(1)——爬取廖雪峰老师的博客

最近一直在学习scrapy,但是网上关于scrapy的教程实在是太少,能找到的教程大多都是基于py2.7/scrapy0.2以下,甚至很多教程都是互相抄袭,连代码都抄漏了好多,更别提各种缩进错误、变量名错误、导入错误了等等。趁着最近正在撸scrapy的官方教程,想着做几个小爬虫促进一下学习、加深印象,就写下了这篇不算教程的“教程”。我也深知,知乎上大牛太多了,所以恳请各位能多多指教!

在你看这个教程的时候,默认你已经基本掌握了python3的语法,不求会写,但是至少你能看懂。为了蹭个热度,特意选了python圈里非常著名的廖雪峰老师的博客作为爬虫对象。廖老师,你博客每天的访问量那么高,也不差让我们这些萌新练练爬虫了吧。


运行环境:

window10 x64系统

python3.6

pycharm

anaconda

scrapy

安装好以上环境、包之后,打开cmd,输入scrapy startproject liaoxuefeng,出现以下提示后,就说明你已经成功创建一个scrapy的新项目:

在该项目的根目录下,文件夹形式如下:

liaoxuefeng/
    scrapy.cfg
    liaoxuefeng/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

开始编写爬虫的第一个代码!打开liaoxuefeng/liaoxuefeng/spiders,创建一个新文件liaoxuefeng.py,写入如下代码:

import scrapy


class LiaoxuefengSpider(scrapy.Spider):
    # 这里是将爬虫定义为scrapy.Spider这个类下的一个实例。
    # Spider这个类定义了爬虫的很多基本功能,我们直接实例化就好,
    # 省却了很多重写方法的麻烦。
    name = 'lxf'
    #这是爬虫的名字,这个非常重要。
    start_urls = ['http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000']
    #这是爬虫开始干活的地址,必须是一个可迭代对象。

    def parse(self, response):
    #爬虫收到上面的地址后,就会发送requests请求,在收到服务器返回的内容后,就将内容传递给parse函数。在这里我们重写函数,达到我们想要的功能。
        titles = response.xpath("//ul[@class='uk-nav uk-nav-side']//a/text()").extract()
        #这是廖雪峰老师python教程的标题列表。我们利用xpath解析器对收到的response进行分析,从而提取出我们需要的数据。//XXX表示任何任何目录下的XXX区块,/XXX表示子目录下的XXX区块,XXX[@class=abc]表示带有class=abc属性值的XXX区块,/text()表示获取该区块的文本。最后加上.extract()表示将内容提取出来。
        for title in titles:
            print (title)
        #这个没什么说的了,直接遍历,然后打印标题。

然后进入cmd,在项目的根目录下运行scrapy crawl lxf(这个lxf就是刚才liaoxuefeng.py文件中的name字段,千万不要弄错了),运行成功,将打印当页所有的目录名称:

最简单的爬虫就写到这里。也许你有地方没看懂,也许我讲的不够详细,欢迎留言提问、建议,更欢迎高手指教!

我的全部文章:

Scrapy爬虫框架入门教程(1)——爬取廖雪峰老师的博客

用python写爬虫,爬取清纯妹子网站(requests/lxml)

Python入门——针对零基础学习者的资料推荐

欢迎加QQ群:613081176,纯技术交流,杜绝广告、刷屏、机器人

点个赞再收藏呀,亲!现在点赞1000+,收藏突破2000+,真有点无语哎!

欢迎关注微信订阅号:python程序员之路

介绍python最新的功能、模块,详解实用代码。主要针对python的初级和中级爱好者。更新频率不会太高,绝不推送广告。有我在,成长的路上不会孤单!



想转载的话请联系作者,谢谢!

编辑于 2017-04-21 23:23