Scrapy爬虫库的使用技巧
Posted wen-kang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy爬虫库的使用技巧相关的知识,希望对你有一定的参考价值。
要使用scrapy库,必须先安装开发依赖,最好先使用pip安装,如果安装twisted提示缺少vc或者框架,可以下载至本地后安装。
建议先安装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)+ "
"
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模式,否则会报出类型错误
以上是关于Scrapy爬虫库的使用技巧的主要内容,如果未能解决你的问题,请参考以下文章
Python3网络爬虫实战-12部署相关库的安装:DockerScrapyd