Scrapy爬虫库的使用技巧

要使用scrapy库,必须先安装开发依赖,最好先使用pip安装,如果安装twisted提示缺少vc或者框架,可以下载至本地后安装。

第三方扩展库地址https://www.lfd.uci.edu/~gohlke/pythonlibs/  下载至本地后 运行 pip install 库文件.wel

建议先安装pyw32,twisted.lxml,这些安装完成后在安装scrapy (pip install scrapy) 有些时候需要先升级pip安装工具

用pycharm命令行 创建一个scrapy项目: scrapy startproject 项目名

我们就能见到一个scrapy项目,在settings配置文件里修改项目的配置信息。

首先启用被注释掉的头文件:

1 DEFAULT_REQUEST_HEADERS = {
2   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
3   'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko',
4 }

添加浏览器的头信息user-agent

启用管道配置文件:

1 ITEM_PIPELINES = {
2    'czbk.pipelines.CzbkPipeline': 300,
3 }

命令创建spider文件:scrapy genspider czSpider(爬虫文件名) itcast.com(项目站点作用域)

此时在项目文件夹spider下就创建出czSpider.py文件 用于编写爬虫文件。

czSpider.p 中的代码示例:

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from czbk.items import CzbkItem
 4 
 5 class CzspiderSpider(scrapy.Spider):
 6     #爬虫名
 7     name = 'czSpider'
 8     #作用域
 9     allowed_domains = ['www.itcast.cn']
10     #起始地址
11     start_urls = ['http://www.itcast.cn/channel/teacher.shtml#ac',
12                   'http://www.itcast.cn/channel/teacher.shtml#acloud',
13                   'http://www.itcast.cn/channel/teacher.shtml#ago',
14                   'http://www.itcast.cn/channel/teacher.shtml#ajavaee',
15                   'http://www.itcast.cn/channel/teacher.shtml#aLinux',
16                   'http://www.itcast.cn/channel/teacher.shtml#amovies',
17                   'http://www.itcast.cn/channel/teacher.shtml#anetmarket',
18                   'http://www.itcast.cn/channel/teacher.shtml#aphp',
19                   'http://www.itcast.cn/channel/teacher.shtml#apm',
20                   'http://www.itcast.cn/channel/teacher.shtml#apython',
21                   'http://www.itcast.cn/channel/teacher.shtml#arobot',
22                   'http://www.itcast.cn/channel/teacher.shtml#atest',
23                   'http://www.itcast.cn/channel/teacher.shtml#aui',
24                   'http://www.itcast.cn/channel/teacher.shtml#aweb'
25                   ]
26 
27 
28     def parse(self, response):
29         item=CzbkItem()    #实例化一个item对象
30         #获取所有相关数据 并存入列表
31         teacher_list=response.xpath('//div[@class="li_txt"]')
32         for each in teacher_list:
33             #遍历列表的每一个元素对象 取出各自的数据
34             name = each.xpath('./h3/text()').extract()
35             title = each.xpath('./h4/text()').extract()
36             about = each.xpath('./p/text()').extract()
37 
38             item['name'] = name[0] #取列表里的数据
39             item['title'] = title[0]
40             item['about'] = about[0]
41 
42             #阻塞式返回参数
43             yield item

值得注意的是在pycharm下引入items文件时由于相对路径已经在项目下,会造成编辑器无法正常识别自动导入,手动导入会报警告,正常,忽略掉。

items文件下用于存储对象的数据字段:

 1 import scrapy
 2 
 3 
 4 class CzbkItem(scrapy.Item):
 5     # define the fields for your item here like:
 6 
 7     #姓名
 8     name = scrapy.Field()
 9     #职称
10     title=scrapy.Field()
11     #简介
12     about=scrapy.Field()

爬虫在yield等待时的数据经过调度器交给piplines去处理:pipelines下代码:

 1 # -*- coding: utf-8 -*-
 2 
 3 # Define your item pipelines here
 4 #
 5 # Don't forget to add your pipeline to the ITEM_PIPELINES setting
 6 # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
 7 import json
 8 
 9 class CzbkPipeline(object):
10     def __init__(self):
11         #创建一个初始化方法 创建一个文件
12         self.filename=open("cz_ter.json","wb")
13 
14     def process_item(self, item, spider):
15         jsontext=json.dumps(dict(item),ensure_ascii=False)+ "\n"
16         self.filename.write(jsontext.encode("utf-8"))
17         return item
18 
19 
20     def close_spider(self,spider):
21         self.filename.close()

默认会有process_item的方法,可以添加自定义初始化方法和关闭爬虫的方法。

注意:python3和python2的在文件操作时的区别:python3下必须采用rb wb模式,否则会报出类型错误

 

posted @ 2019-03-07 15:32  青红*皂了个白  阅读(687)  评论(0编辑  收藏  举报