day96 scrapy
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相关推荐
- 最新python全栈3期高级开发工程师 独家完整版
课程目录: │ ├─1-10 │ │ │ ├─day01 │ │ 01 python全栈s3 day1 计算机发展史.mp4 │ │ 02 python全栈s3 d ...
- 2018 python全栈3期高级开发工程师 独家完整版
课程目录: │ ├─1-10 │ │ │ ├─day01 │ │ 01 python全栈s3 day1 计算机发展史.mp4 │ │ 02 python全栈s3 day1 计算机系统.mp4 │ │ ...
- win10 python 【scrapy crawl chouti --nolog 】 cmd 命令不执行parse函数(没有内容输出) 原因...
想要执行parse能够在cmd看到parse函数的执行结果: 解决方法: settings.py 中设置 ROBOTSTXT_OBEY = False 案例: day96\day96\spiders ...
- Python 爬虫框架Scrapy安装汇总
传统方式安装Scrapy(慎用) 练习了基本的操作之后,当然就要找框架来进行爬虫实验啊.于是就在网上找Windows 64安装Scrapy的方法,查到的都是非常繁琐的安装方式,由于Scrapy有很多个 ...
- Python:爬虫框架Scrapy的安装与基本使用
一.简单实例,了解基本. 1.安装Scrapy框架 这里如果直接pip3 install scrapy可能会出错. 所以你可以先安装lxml:pip3 install lxml(已安装请忽略). 安装 ...
- Python:Scrapy实战项目手机App抓包爬虫
1. items.py class DouyuspiderItem(scrapy.Item):name = scrapy.Field()# 存储照片的名字imagesUrls = scrapy.Fie ...
- Python:Scrapy的settings
Settings Scrapy设置(settings)提供了定制Scrapy组件的方法.可以控制包括核心(core),插件(extension),pipeline及spider组件.比如 设置Json ...
- Python:Scrapy Shell
Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...
- Python:Scrapy的安装和入门案例
Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...
- Python:Scrapy 框架简单介绍
Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非 ...
最新文章
- AI 语言模型真的是越大越好吗?这个模型优于 Gopher
- MVC+EF三层+抽象工厂
- tcp 测试软件,ztcp
- UVa 548 Tree(中序遍历+后序遍历)
- acer软件保护卡怎么解除_外观精致性能强,配置丰富重量轻、宏碁(Acer)墨舞EX214轻薄笔记本 深度评测...
- 基于pytorch的CNN算法的实现
- 各种泵的图形符号_液压泵以及液压马达的常见图形符号
- QT项目:linux资源监视器
- 串口服务器通讯协议,串口服务器的组成和应用实例
- 无线网络dns服务器设置,无线网络的dns怎么设置才正确
- Android ORC文字识别之识别身份证号等(附源码)
- qduoj 分辣条2
- 在线将html文件转pdf,在线将html转换成pdf文件 示例源码
- 遍身罗绮者 不是养蚕人
- STL学习笔记7 ——STL算法(一)
- Android检测仪开发---BleBluetooth 多连接
- C# WinForm窗体制作以图片为背景的登陆界面
- 开源BI平台软件特性对比
- n维椭球体积公式_2020中考物理知识汇总:公式大全
- 【黄啊码】php商城搭建从0到n,可用于毕业设计
热门文章
- jsp——四大作用域详解
- bat批处理脚本获取window系统所有用户名并设置密码,禁用Guest账户
- iPhone4 iOS 4.3.3 越狱之后必装的插件
- 如何下载风云卫星数据?
- XSS盗取用户信息实验(详细)及xss之旅闯关
- 传奇程序员云风:从创业到被招安,细数我这20年程序人生
- panabit之MAC管控
- Centos 7.2 安装Docker CE实践并配置加速器
- rails kaminari text modify
- oracle Parallel模式-Parallel用法(/*+PARALLEL(n)*/)