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爬虫库的使用技巧的主要内容,如果未能解决你的问题,请参考以下文章

Scrapy爬虫库的使用技巧

python3爬虫

Python3网络爬虫实战-12部署相关库的安装:DockerScrapyd

Python3网络爬虫实战-14部署相关库的安装:ScrapyrtGerapy

Python爬虫库Scrapy入门1--爬取当当网商品数据

最高效的python爬虫框架有几个