【Python3.4.3】Scrapy1.2.0网络爬虫使用入门(一)
安装方法就不多说啦,很多坑,如果有遇到问题的可以参考下面文章试试能不能解决[Scrapy(1)安装方法]Python3.4.3 安装scrapy时的各种问题,测试环境win7 64位 抓取指定博客的文章,使用方法找一个空目录,按着shift 点鼠标右键,点->在此处打开命令行,输入下面命令创建一个项目
scrapy startproject blog
执行后会生成一个blog目录里面有一个blog目录和scrapy.cfg配置文件,主要的项目文件在blog这个目录里,items这个文件里定义我们要抓取的哪些数据字段,settings.py这个文件可以定义这个蜘蛛的一些行为信息,比如http请求头信息。 pipelines 意思是管道的数据,通过settings.py的配置可以把数据传到这里来,进行入库过虑筛选等操作。
开始抓取内容前我们要确定需要什么内容,要先创建要抓取的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的语法,如果不会的请自行查百度,谷歌,然后返回到项目根目录,如下
在当前目录打开命令行,输入下面命令运行article这个蜘蛛,意思是运行蜘蛛并且把结果保存到项目根目录中以article.json为名字,内容为抓取到的json数据
scrapy crawl article -o article.json
另外如果你的蜘蛛可能会运行很长时候的话,中途需要停止恢复功能的话,可以使用下面命令让蜘蛛能保存当前的状态,停止只要按下Ctrl+C,再启动的时候同样的命令,并且会从上次执行的地方继续工作。注意每启动一个蜘蛛jobdir后面的名字都不能重复,要保证唯一性
scrapy crawl article -o article.json -s JOBDIR=crawls/blog_article1
内容为json格式,直接复制到谷歌浏览器的控制台运行就可以看结构
如果想把数据保存到数据库,进一步处理数据可以使用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这个文件里有很多跟蜘蛛相关的配置项,一定要看
下面文章介绍从一个网站抓取自己想要的内容