1.scrapy安装   ubuntu下安装 

1.先安装pipsudo apt install python3-pip2.安装依耐sudo apt install python-dev3.安装非Python的依赖 sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev4.用pip安装scrapysudo pip install scrapy

2.创建爬虫项目 

scrapy startproject mySpider

3.在当前目录下输入命令,将在mySpider/spider目录下创建一个名为itcast的爬虫,并指定爬取域的

scrapy genspider itcast 'itcast.cn'

4.items 创建类 主要用来存数据的 有点像mode里面的orm

 1 import scrapy
 2
 3
 4 class MyspiderItem(scrapy.Item):
 5     # define the fields for your item here like:
 6     # name = scrapy.Field()
 7
 8     name = scrapy.Field()
 9     title = scrapy.Field()
10     info= scrapy.Field()

5.spiders 文件里面刚才创建的爬虫

# -*- coding: utf-8 -*-
import scrapy
from mySpider.items import MyspiderItemclass ChuanzhiSpider(scrapy.Spider):name = 'chuanzhi'allowed_domains = ['itcast.cn']start_urls = ['http://www.itcast.cn/channel/teacher.shtml#apython']def parse(self, response):# with open("teacher.html", "w") as f:#    f.write(response.body)# 通过scrapy自带的xpath匹配出所有老师的根节点列表集合teacher_list = response.xpath('//div[@class="li_txt"]')# 所有老师信息的列表集合teacherItem = []# 遍历根节点集合for each in teacher_list:# Item对象用来保存数据的item = MyspiderItem()# name, extract() 将匹配出来的结果转换为Unicode字符串# 不加extract() 结果为xpath匹配对象#extract_first 直接提取第一个不用加下标取值name = each.xpath('./h3/text()').extract_first()# titletitle = each.xpath('./h4/text()').extract()# infoinfo = each.xpath('./p/text()').extract()item['name'] = name# item['title'] = title[0]# item['info'] = info[0]# item['name'] = name[0]# item['title'] = title[0]# item['info'] = info[0]#yield item
teacherItem.append(item)# print name[0]# print title[0]# print info[0]return teacherItem

注意:运行用命令 scrapy  crawl  itcast   --nolog 参数--nolog不显示执行中的其它信息 可以不加    导出的命令  scrapy crawl itcast -o test.json/test.csv  

实例:

  items文件

1 import scrapy
2
3 class cqitItme(scrapy.Item):
4     pageText = scrapy.Field()
5     hrefText = scrapy.Field()

爬虫文件

 1 import scrapy
 2 from scrapy.selector import Selector, XmlXPathSelector
 3 from scrapy.http import Request
 4 from ..items import cqitItme
 5
 6
 7 class CqitSpider(scrapy.Spider):
 8     name = 'cqit'
 9     allowed_domains = ['cqsq.com'] #注意这个域名范围  不能写成 'www.cqsq.com' 或者'cqsq.com/'
10     start_urls = ['https://www.cqsq.com/list/7']
11     set_href = []
12
13     def parse(self, response):
14         a = Selector(response=response).xpath("//div[@class= 'pages']/a")
15   #实例化items里面创建的类 以便下面赋值并返回数据到pipelines文件中去做数据处理
16         itme = cqitItme()
17         for i in a:
18
19             i1 = i.xpath('.//@href').extract_first()
20             itext = i.xpath('.//text()').extract_first()
21
22             if i1 in self.set_href or i1 == "//www.cqsq.com/list/7/50":
23                 pass
24             else:
25
26                 self.set_href.append(i1)
27                 url1 = 'https:' + i1
28                 itme['pageText'] =itext
29                 itme['hrefText'] =url1
30
31                 print(url1)
32           #这里是返回实例数据并提交到pipelines文件中去处理
33                 yield itme
34                 #发送新的url到控制的阵列里去等去等待下次扏行  注意dont_filter去重参数 true是代表不去重 默认为false
35                 yield Request(url=url1, callback=self.parse, dont_filter=True)

pipelines文件

1 class dyspiderPipeline(object):  #注意在settings文件中去设置该类的权重
2
3     def __init__(self):
4         self.f = open('test1','w')
5     def process_item(self, item, spider):#这里的itm就是爬虫文件k yield回来的数据
6         import json
7         content = json.dumps(dict(item),ensure_ascii=False)+'\n'
8         self.f.write(content)
9         return item

setting 配置文件 

ITEM_PIPELINES = {'mySpider.pipelines.MyspiderPipeline': 300,'mySpider.pipelines.dyspiderPipeline': 300, #PIPELINENS 注册的位置 300代表的是权重
}DEPTH_LIMIT = 2 #深度为2 如果为0的话就是代表没有深度
DUPEFILTER_CLASS = "mySpider.spiders.repeatfilter.Repeat" #自定义去重的路径

自定义去重 重写yield Rquest(url = url ,callback = self.parse ,dont_filter = False ) #false 代表的就是去重 默认调用的是  #from scrapy.dupefilters import RFPDupeFilter

重构代码: 新建一个repeatfilter 的python文件  导入方法看上面setting配置文件里面的设置

 1 class Repeat(object):
 2     def __init__(self):       '''第二步执行 构造函数'''
 3         self.visited_set = []
 4     @classmethod
 5     def from_settings(cls, settings):      '''这里是第一步执行 相当于是obj = Repeat.from_settings'''
 6         return cls()
 7
 8     def request_seen(self, request):    '''第里是第四步执行 主要是判断罗辑的'''
 9
10         if request.url in self.visited_set or request.url == "https://www.cqsq.com/list/7/50":
11
12             return True
13         else:
14             self.visited_set.append(request.url)
15
16             return False
17
18
19
20     def open(self):  # can return deferred
21         # print('open') 第三步执行
22         pass
23
24     def close(self, reason):  # can return a deferred
25         # print('close') 第5步执行
26         pass
27     def log(self, request, spider):  # log that a request has been filtered
28         # print('log....') 最后执行的日志
29         pass

pipeline补充

 1 from scrapy.exceptions import DropItem
 2
 3 class Day96Pipeline(object):
 4
 5     def __init__(self,conn_str):
 6         '''第二步'''
 7         self.conn_str = conn_str
 8
 9     @classmethod
10     def from_crawler(cls, crawler):
11         """
12         初始化时候,用于创建pipeline对象
13         :param crawler:
14         :return:
15         第一步
16         """
17         conn_str = crawler.settings.get('DB')
18         return cls(conn_str)
19
20     def open_spider(self,spider):
21         """
22         第三步
23         爬虫开始执行时,调用
24         :param spider:
25         :return:
26         """
27         self.conn = open(self.conn_str, 'a')
28
29     def close_spider(self,spider):
30         """
31         第五步
32         爬虫关闭时,被调用
33         :param spider:
34         :return:
35         """
36         self.conn.close()
37
38     def process_item(self, item, spider):
39         """
40         第四步
41         每当数据需要持久化时,就会被调用
42         :param item:
43         :param spider:
44         :return:
45         """
46         # if spider.name == 'chouti'
47         tpl = "%s\n%s\n\n" %(item['title'],item['href'])
48         self.conn.write(tpl)
49         # 交给下一个pipeline处理
50         return item
51         # 丢弃item,不交给
52         # raise DropItem()
53
54 class Day97Pipeline(object):
55
56     def __init__(self,conn_str):
57         self.conn_str = conn_str
58
59     @classmethod
60     def from_crawler(cls, crawler):
61         """
62         初始化时候,用于创建pipeline对象
63         :param crawler:
64         :return:
65         """
66         conn_str = crawler.settings.get('DB')
67         return cls(conn_str)
68
69     def open_spider(self,spider):
70         """
71         爬虫开始执行时,调用
72         :param spider:
73         :return:
74         """
75         self.conn = open(self.conn_str, 'a')
76
77     def close_spider(self,spider):
78         """
79         爬虫关闭时,被调用
80         :param spider:
81         :return:
82         """
83         self.conn.close()
84
85     def process_item(self, item, spider):
86         """
87         每当数据需要持久化时,就会被调用
88         :param item:
89         :param spider:
90         :return:
91         """
92         # if spider.name == 'chouti'
93         tpl = "%s\n%s\n\n" %(item['title'],item['href'])
94         self.conn.write(tpl)
95
96         #这几个方法的套路和上面自定义去重是一样的执行套路  注意process_itme里面return itme 代表交给下个权重执行 如果是return Dropitme() 则代表抛异常 不交给下个执行
 

转载于:https://www.cnblogs.com/qq769080870/p/9051142.html

day96 scrapy相关推荐

  1. 最新python全栈3期高级开发工程师 独家完整版

    课程目录: │   ├─1-10 │  │   │  ├─day01 │  │      01 python全栈s3 day1 计算机发展史.mp4 │  │      02 python全栈s3 d ...

  2. 2018 python全栈3期高级开发工程师 独家完整版

    课程目录: │ ├─1-10 │ │ │ ├─day01 │ │ 01 python全栈s3 day1 计算机发展史.mp4 │ │ 02 python全栈s3 day1 计算机系统.mp4 │ │ ...

  3. win10 python 【scrapy crawl chouti --nolog 】 cmd 命令不执行parse函数(没有内容输出) 原因...

    想要执行parse能够在cmd看到parse函数的执行结果: 解决方法: settings.py 中设置  ROBOTSTXT_OBEY = False 案例: day96\day96\spiders ...

  4. Python 爬虫框架Scrapy安装汇总

    传统方式安装Scrapy(慎用) 练习了基本的操作之后,当然就要找框架来进行爬虫实验啊.于是就在网上找Windows 64安装Scrapy的方法,查到的都是非常繁琐的安装方式,由于Scrapy有很多个 ...

  5. Python:爬虫框架Scrapy的安装与基本使用

    一.简单实例,了解基本. 1.安装Scrapy框架 这里如果直接pip3 install scrapy可能会出错. 所以你可以先安装lxml:pip3 install lxml(已安装请忽略). 安装 ...

  6. Python:Scrapy实战项目手机App抓包爬虫

    1. items.py class DouyuspiderItem(scrapy.Item):name = scrapy.Field()# 存储照片的名字imagesUrls = scrapy.Fie ...

  7. Python:Scrapy的settings

    Settings Scrapy设置(settings)提供了定制Scrapy组件的方法.可以控制包括核心(core),插件(extension),pipeline及spider组件.比如 设置Json ...

  8. Python:Scrapy Shell

    Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...

  9. Python:Scrapy的安装和入门案例

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  10. Python:Scrapy 框架简单介绍

    Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...

最新文章

  1. AI 语言模型真的是越大越好吗?这个模型优于 Gopher
  2. MVC+EF三层+抽象工厂
  3. tcp 测试软件,ztcp
  4. UVa 548 Tree(中序遍历+后序遍历)
  5. acer软件保护卡怎么解除_外观精致性能强,配置丰富重量轻、宏碁(Acer)墨舞EX214轻薄笔记本 深度评测...
  6. 基于pytorch的CNN算法的实现
  7. 各种泵的图形符号_液压泵以及液压马达的常见图形符号
  8. QT项目:linux资源监视器
  9. 串口服务器通讯协议,串口服务器的组成和应用实例
  10. 无线网络dns服务器设置,无线网络的dns怎么设置才正确
  11. Android ORC文字识别之识别身份证号等(附源码)
  12. qduoj 分辣条2
  13. 在线将html文件转pdf,在线将html转换成pdf文件 示例源码
  14. 遍身罗绮者 不是养蚕人
  15. STL学习笔记7 ——STL算法(一)
  16. Android检测仪开发---BleBluetooth 多连接
  17. C# WinForm窗体制作以图片为背景的登陆界面
  18. 开源BI平台软件特性对比
  19. n维椭球体积公式_2020中考物理知识汇总:公式大全
  20. 【黄啊码】php商城搭建从0到n,可用于毕业设计

热门文章

  1. jsp——四大作用域详解
  2. bat批处理脚本获取window系统所有用户名并设置密码,禁用Guest账户
  3. iPhone4 iOS 4.3.3 越狱之后必装的插件
  4. 如何下载风云卫星数据?
  5. XSS盗取用户信息实验(详细)及xss之旅闯关
  6. 传奇程序员云风:从创业到被招安,细数我这20年程序人生
  7. panabit之MAC管控
  8. Centos 7.2 安装Docker CE实践并配置加速器
  9. rails kaminari text modify
  10. oracle Parallel模式-Parallel用法(/*+PARALLEL(n)*/)