【Python3.4.3】Scrapy1.2.0网络爬虫使用入门(一)

来源:赵克立 分类: Python 标签:Python网络爬虫Scrapy发布时间:2016-12-04 16:11:12浏览:120
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
温馨提示:
技术类文章有它的时效性,请留意文章更新时间以及软件的版本
更新时间:
2017-10-05 14:51:53

安装方法就不多说啦,很多坑,如果有遇到问题的可以参考下面文章试试能不能解决[Scrapy(1)安装方法]Python3.4.3 安装scrapy时的各种问题,测试环境win7 64位  抓取指定博客的文章,使用方法找一个空目录,按着shift 点鼠标右键,点->在此处打开命令行,输入下面命令创建一个项目

scrapy startproject blog

执行后会生成一个blog目录里面有一个blog目录和scrapy.cfg配置文件,主要的项目文件在blog这个目录里,items这个文件里定义我们要抓取的哪些数据字段,settings.py这个文件可以定义这个蜘蛛的一些行为信息,比如http请求头信息。 pipelines 意思是管道的数据,通过settings.py的配置可以把数据传到这里来,进行入库过虑筛选等操作。

blob.png

开始抓取内容前我们要确定需要什么内容,要先创建要抓取的item,打开上图中的items文件输入下面代码,我们要抓取文章的标题和链接,所以在这个里面定义

# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class ArticleItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    link = scrapy.Field()
    pass

然后打开spiders目录创建article.py文件,这个是定义你要抓取内容的蜘蛛,输入下面代码

# -*- coding: utf-8 -*-
import scrapy
from blog.items import ArticleItem
class ArticleSpider(scrapy.Spider):
    name = "article"#这个地方要和蜘蛛名字一至,要注意一下
    allowed_domains = ["xxxx.com"]
    start_urls = (
        "https://www.xxxx.com/list1.html",
    )
    def parse(self, response):
        for sel in response.xpath('//dl/dd'):
            item = ArticleItem()
            item['title'] = sel.xpath('a/text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            # print(item)
            yield item

里面的选取标题和链接的方法是用xpath的语法,如果不会的请自行查百度,谷歌,然后返回到项目根目录,如下

blob.png

在当前目录打开命令行,输入下面命令运行article这个蜘蛛,意思是运行蜘蛛并且把结果保存到项目根目录中以article.json为名字,内容为抓取到的json数据

scrapy crawl article -o article.json


blob.png

另外如果你的蜘蛛可能会运行很长时候的话,中途需要停止恢复功能的话,可以使用下面命令让蜘蛛能保存当前的状态,停止只要按下Ctrl+C,再启动的时候同样的命令,并且会从上次执行的地方继续工作。注意每启动一个蜘蛛jobdir后面的名字都不能重复,要保证唯一性

scrapy crawl article -o article.json    -s JOBDIR=crawls/blog_article1

内容为json格式,直接复制到谷歌浏览器的控制台运行就可以看结构

blob.png

blob.png

如果想把数据保存到数据库,进一步处理数据可以使用pipelines.py这外文件,每抓取到item.py里定义的数据就会传到这里来

import pymongo
class TutorialPipeline(object):
    def open_spider(self, spider):
        self.client = pymongo.MongoClient('localhost', 27017)
        self.test = self.client['test']
        self.testData = self.test['testData']
        pass
    def process_item(self, item, spider):
        data = {
            'title': item['title'],
            'url': item['url']
        }
        self.testData.insert_one(data)
        return item
    def close_spider(self, spider):
        pass

三个函数,第一个open_spider在spider开始的时候执行,在这个函数中我们一般会连接数据库,为数据存储做准备,上面代码中我连接了mongo数据库。process_item函数在捕捉到item的时候执行,一般我们会在这里做数据过滤并且把数据存入数据库。close_spider在spider结束的时候执行,一般用来断开数据库连接或者做数据收尾工作。写好pipeline之后我们需要到settings.py中开启pipeline:

ITEM_PIPELINES = { 
  'tutorial.pipelines.TutorialPipeline': 300,
}

找到ITEM_PIPELINES 选项,把我们pipeline的路径配置进去,后面的数字表示的是pipeline的执行顺序,


注意:settings.py这个文件里有很多跟蜘蛛相关的配置项,一定要看

下面文章介绍从一个网站抓取自己想要的内容

【Python3.4.3】Scrapy1.2.0网络爬虫使用CrawlSpider抓取整站内容(二)


微信号:mokuyu QQ群:215861553 紧急求助须知
留下一点心意, :)
点击更换验证码
留言