zoukankan      html  css  js  c++  java
  • 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)+ "
    "
    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模式,否则会报出类型错误

  • 相关阅读:
    dom 获取节点练习
    dom 节点的添加删除 与修改
    dom document属性练习
    ArrayList 去除重复元素
    ud类型聊天
    UDP数据发送
    指定标签所在div在新窗口打开
    日期Calendar
    Seraph介绍
    U盘cmd命令行修复
  • 原文地址:https://www.cnblogs.com/wen-kang/p/10489952.html
Copyright © 2011-2022 走看看