美文网首页
第三章 网站内容爬取之创建项目

第三章 网站内容爬取之创建项目

作者: 田同学的小迷妹儿 | 来源:发表于2018-08-27 20:57 被阅读13次

    首先爬取一个网站前,我们需要分析网络的url结构,伯乐在线的网站结构是采用顶级域名下有二级域名,来区分每种类别的信息,并且在文章专栏里面,有一个http://web.jobbole.com/all-posts/是所有文章的总链接,在这个链接下,分页显示了所有的文章内容。

    因此对于这种爬取内容有一个总链接的话,就不需要采用深度优先或者广度优先策略,只需要将这个总链接下的每一页的内容取出即可。说到每一页,查看url特点,发现就是在链接后面修改了页数,但是不能用这个方法,因为网站上文章数发生变化时,就必须要去修改源码。
    如果是对每个分页上的写一页的链接进行跟踪,那么有多少页都无所谓了。

    3.1 通过命令行创建pycharm scrapy项目步骤:

    1. 创建一个虚拟环境article_spider:mkvirtualenv article_spider
    2. 在这个虚拟环境内安装scrapy: pip install -i https://pypi.douban.com/simple/ scrapy
      注意安装的时候可能会报错,twisted找不到,那么就去https://www.lfd.uci.edu/~gohlke/pythonlibs/下载安装包,手动安装,安装的时候必须也是在这个虚拟环境内
    3. 建立scrapy项目,pycharm里面没有scrapy的工程,所以需要在命令行内手动安装
      进入pycharm工作目录cd d:\PycharmProjects
      进入虚拟环境workon article_spider
      创建scrapy项目专门爬取伯乐在线的文章scrapy startproject ArticleSpider,如下图,即为创建成功
    4. 在pycharm中打开刚创建的项目

    3.2 pycharm项目工程文件的理解

    scrapy.cfg: 类似于django的配置,它大量的借鉴了django的设计理念
    settings.py: 包含了很多scrapy的配置,工程名字,spider_modules也指明了存放spiders的路径
    pipelines.py: 做跟数据存储相关的
    middlewares.py: 可以存放自己定义的middlewares,让scrapy变得更加可控
    items.py: 有点类似于django里面的form,定义数据保存的格式
    spiders文件夹:里面存放具体某个网站的爬虫,scrapy会去这个文件夹里面找有多少个爬虫文件,只需要在这里面继承了spiders,就会被scrapy找到

    3.3 创建具体的spider方法

    刚创建好项目的时候这个文件夹是空的,默认并没有创建网站爬取的模板,但是提供了命令,scrapy genspider example example.com,第三个词是spider的名称,后面是网站的域名。如图:

    以上部分是关于scrapy虚拟环境的搭建,以及如何通过命令来新建一个scrapy工程。

    在pycharm打开article_spider项目之后,需要导入之前创建的虚拟环境,即配置解释器。项目默认的是python3环境的python.exe,但是如果你创建了虚拟环境,虚拟环境的文件夹的scripts文件夹下也有python.exe。

    3.4 启动spider的两种方法

    1. 启动一个spider的命令是scrapy crawl spider名称,运行命令尝试一下是否能正确启动jobbole这个spider,出现如下情况,解决好安装完成win32包之后就能正常启动了。启动sipder报错No module named "Win32api"解决办法如下“:
    1. 但是我们要在pycharm中完成爬虫,而不是每次都打开命令行,因此编写mian.py文件(放在主项目下),来调用spider命令。右键运行这个文件就可以啦。
    # pycharm里面没有关于scrapy的模板,所以是没法直接调试的,需要自己手动编写一个main文件
    # 在这个文件中调用命令行,就可以完成调试了
    
    from scrapy.cmdline import execute
    # 调用这个函数可以执行scrapy的脚本
    
    import sys
    import os
    
    # print(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(os.path.dirname(os.path.abspath(__file__)))
    # os.path.dirname(os.path.abspath(__file__)) 获取main文件路径的父目录
    # os.path.abspath(__file__) 获取当前main文件的路径
    # 需要设置工程的目录,必须在项目所在的目录下运行,再调用执行命令才会生效
    # sys.path.append("D:\PycharmProjects\ArticleSpider") 如果路径设置死了,一旦项目位置发生变动,就需要改动很麻烦
    
    execute(["scrapy","crawl","jobbole"])
    # 调用execute()函数来执行spider命令,传入数组,即是执行启动spider的命令
    
    # 一运行这个文件,如果在jobbole.py中parse()函数处设置断点,可以发现能够正常启动,并且返回了相关response变量
    # 点开这个变量可以查看到,访问了某个网址,并且正常响应,也得到了body网页内容
    # 下一步就是对其中的内容进行解析,获取想要爬取的内容啦。
    

    相关文章

      网友评论

          本文标题:第三章 网站内容爬取之创建项目

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