安装scrapy 在cmd中运行
pip的安装方法python3.7 安装pip3
pip insatll scrapy
检测scrap安装情况
scrapy -h
scrapy爬虫框架结构
5+2结构
Engine
控制所有模块之间的数据流 根据条件触发schdule
请求的调度Downloader
: 根据请求下载网页 不需要用户修改- engine 与 downloader之间的中间件叫downloader middleware 目的是实施engine schedule 和downloader之间进行用户可配置的控制 即修改 丢弃 新增请求或者响应
spider
– 解析downloader返回的响应
–产生爬取项(即爬取自己需要的数据)
– 产生额外的爬取请求(request)即爬取的网页值依旧含有我们感兴趣的连接则再次触发请求item piplines
—以流水线的形式处理spider产生的数据项(数据的再次加工)
–由一组操作顺序组成,类似流水线每个操作是一个item piplines类型
– 可能的操作 清理 检验和查重爬取项中的html数据 将数据存储到数据库spider middle
对请求和爬取项的再处理
功能 修改丢弃 新增 请求和爬取项
scrapy 爬虫的常用命令
startproject 创建一个新工程 sracpy startproject <name>
[dir]
genspider 创建一个爬虫 scarpy genspider <name> <domain>
爬虫的名字 域名
settings 获得爬虫的配置信息 scrapy settings [options]
crawl 运行一个爬虫 scrapy crawl <spider>
list 列出工程中所有的爬虫 scrapy list
shell 启动url调试命令行 scrapy shell [url]
项目下执行的命令
scrapy check
进入项目后执行检查的操作 查看代码是否有错误
scrapy fetch --nolog --headers http://www.baidu.com
爬取网页的源代码
scrapy view http://www.baidu.com
查看爬取的网页并以网页的形式展示出来
scrapy parse http://www.baidu.com -callback func
在爬虫项目下 执行ing调用回调的函数func 进行处理文本
scrapy runspider program.py
执行program爬虫项目
scrapy选择器的使用对数据进行提取
xpath
- xpath 选择特定属性值的元素结合
response.selector.xpath("//div[@id='images']").ewtract()
- xoath 选择标签的属性集合
response.selector.xpath("//a/@href").extract()
可以看出固定的格式就是("//tag/@attr")
查找的结果就是href的结果集 - xpath 获取文本的内容
response.xpath("//a/text()")
可以看出固定的格式就是("//tag/text()")
- xpath 查找
a
元素里面包含image
元素的数据 并返回该链接的href
response.xpath("//a[contains(@href,'image')]/@href")
- xpath 获取a标签里面包含image属性的的src属性集合
response.xpath("a[contains(@href,"image")]/img/@src").extract()
css
- css 选择文本信息
response.selector.css("tag::text").extract_first()
- css选择属性的信息
response.css("img:attr(src)").extract()
- css里面查找href 里面包含image的元素并返回 href
response.css("a[href*=image]::attr(href)"),extract()
- css 获取a标签里面包含image属性的的src属性集合
response.css("a[href*=image] img::attr(src)").extract()
re
-
.re_first("正则表达式")
-
extract_first() 返回的是查找到的第一个元素
遇到的bug
scrapy做爬虫时,导入Module的时候总显示no module named ×××.items?
此时需要将当前目录设置为根目录和eclipse一样的道理 scrapy项目上右键
-》make_directory as
–>sources root
数据的存储处理
- 命令行模式
将爬取的数据存储成json格式命令
scrpay crawl quotes -o quotes.json
执行quotes爬虫 并将数据存储称为 quotes.json
scrpay crawl quotes -o quotes.csv
存储称为csv格式的文件
scrpay crawl quotes -o quotes.jl
存储成为jl的文件
scrpay crawl quotes -o quotes.xml
存储称为xml文件
存储到ftp服务器上面
scrpay crawl quotes -o ftp://user:pass@ftp.example.com/path/quotes.csv
- 配置pipeline的模式
我们通过spider中parse处理的数据传送到item/pipeline中后对数据进行继续的处理因此,操作要写在pipeline里面 pipeline里面书写的方式必须重写process_item的方法#jsonwritepipeline 将文件写到json文件中 class JsonWritePipeline(object): def open_spider(self,spider): #k开启爬虫就执行 self.file = open("quote.jl","w") #不能写入二进制 def close_spider(self,spider): self.file.close() #关闭爬虫执行 def process_item(self,item,spider):#处理从spider中parse过的item数据 line = json.dumps(dict(item))+"\n" self.file.write(line) return item