爬虫基础09B—scrapy爬虫
目录
scrapy爬虫:
1)创建scrapy项目
2)创建爬虫代码
3) 爬虫:
1. scrapy-环境搭建
2. scrapy-爬网页-转存文件到本地
3. scrapy原理
4. Scrapy shell
4.1 Scrapy作业-Scrapy shell
2)练习:
5. scrapy命令行工具
6.Spider文件夹
7. pycharm操作数据库
8. scrapy爬豆瓣
8.1 scrapy startproject doubanmovie
8.2 编辑保存数据的容器文件:items.py
8.3 切换terminal目录:cd doubanmovie
8.4 settings.py文件
8.5 配置pipelines.py文件(以实现持久化存储)
8.6 爬:scrapy crawl doubanspider
scrapy爬虫:
1)创建scrapy项目
terminal下输入:scrapy startproject tutorial
切换目录: cd tutorial
执行上述命令后,自动的创建了scrapy项目
生成了项目目录-tutorial
scrapy.cfg 部署的配置文件
tutorial/
__init__.py 初始化文件,暂不操作
items.py 项目定义文件
middlewares.py 中间件文件
pipelines.py 项目管道文件
settings.py 项目配置文件
spiders/ 爬虫目录
2)创建爬虫代码
创建\spiders\quotes_spider.py文件(在爬虫目录spiders下创建爬虫文件quotes_spider.py)
写入如下内容:
import scrapyclass QuotesSpider(scrapy.Spider):# 必须继承scarpy.Spider类name = 'quotes' #爬虫项目唯一标识# 创建爬虫方法def start_requests(self):urls = ['http://quotes.toscrape.com/page/1/','http://quotes.toscrape.com/page/2/',]for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):page = response.url.split('/')[-2]filename = 'quotes-%s.html'%pagewith open(filename, 'wb') as f:f.write(response.body)self.log('Saved file %s'%filename)
3) 爬虫:
terminal下:
scrapy crawl quotes
--------------------------------------------------------------------------------------------------------------------------------
(综合如上的内容)
1. scrapy-环境搭建
2. scrapy-爬网页-转存文件到本地
1) terminal下:创建scrapy项目-tutorial
scrapy startproject tutorial
再cd到tutorial
爬取数据的网页是:
http://quotes.toscrape.com/page/1/
http://quotes.toscrape.com/page/2/
2) 在项目目录:
tutorial/
tutorial/
spiders文件夹下创建爬虫代码文件:quotes_spider.py 书写未知的爬虫代码
import scrapyclass QuotesSpider(scrapy.Spider): #定义类并继承scrapy.Spidername = 'quotes'def start_requests(self):urls = ['http://quotes.toscrape.com/page/1/','http://quotes.toscrape.com/page/2/']for url in urls:yield scrapy.Request(url=url, callback=self.parse)def parse(self, response):page = response.url.split('/')[-2]filename = 'quotes-%s.html'%pagewith open(filename,'wb') as f:f.write(response.body)self.log('Saved file %s'%filename)
执行爬虫:
terminal:scrapy crawl quotes
3. scrapy原理
1)Scrapy Engine引擎
负责控制数据流在系统组件的流动,当特定动作发生时触发事件
2)Scheduler调度器
从引擎中接收request并且将他们入队
3)Downloader下载器
负责获取页面数据并且提供给引擎,之后提供给spider
4)Spiders爬虫
它是Scrapy用户编写用于分析response并且获取item或者额外的数据
5)ItemPiPeline管道
负责将Spider爬虫提取出来的数据进行持久化保存
6)Downloader Middleware下载器中间件
是引擎和下载器之间特定组件,拥有㔘Downloader传递给引擎response
7)Spider Middleware Spider中间件
处理spider输入response与输出items和requests
4. Scrapy shell
http://quotes.toscrape.com/page/1/
terminal下输入:
scrapy shell "http://quotes.toscrape.com/page/1/"
提取标题
response.css('title')
提取标题文本
response.css('title').extract()
提取标题文本,返回文本内容列表
response.css('title::text').extract()
字符串格式的文本内容
response.css('title::text').extract_first()
或者
response.css('title::text')[0].extract()
5. 作业:terminal下的输入和输出内容发送到邮箱616971722@qq.com
使用scrapy shell 爬取页面信息
scrapy shell ‘http://quotes.toscrape.com’
1)找css内容:div标签,属性值是quote
2)第一段名人名言的内容输出
3)第一段名人名言的作者输出
4.1 Scrapy作业-Scrapy shell
1)terminal下:
scrapy shell "http://quotes.toscrape.com/"
response:请求后的应答信息
获取页面内容:
.css
.xpath
返回页面信息:
extract()
extract_first()
获取页面标题
response.xpath('//title/text()').extract_first()
第一段
quote = response.css('div.quote')[0]
第一段中解析-名言
title = quote.css('span.text::text').extract_first()
第一段中解析-作者
author = quote.css('small.author::text').extract_first()
第一段中解析-标签
tags = quote.css('div.tags a.tag::text').extract()
遍历整个页面:依次输出每段信息In [13]: for quote in response.css('div.quote'):...: text = quote.css('span.text::text').extract_first()...: author = quote.css('small.author::text').extract_first()...: tags = quote.css('div.tags a.tag::text').extract()...: print(dict(text=text,author=author,tags=tags))退出交互模式:exit
2)练习:
1. 创建scrapy项目
改善爬虫代码:
下在页面转为打印页面信息
text/author/tags
代码:
import scrapyclass QuotesSpider(scrapy.Spider):name = 'quote'start_urls = ['http://quotes.toscrape.com/page/1','http://quotes.toscrape.com/page/2']def parse(self, response): #解析页面for quote in response.css('div.quote'):yield {'text':quote.css('span.text::text').extract_first(),'author':quote.css('small.author::text').extract_first(),'tags':quote.css('a.tag::text').extract()}
2. 写python代码完成数据库创建
import pymysqlcon = pymysql.connect(host = 'localhost',user = 'root',passwd = '123456',charset = 'utf8')cur = con.cursor()cur.execute('CREATE DATABASE doubanmovie CHARACTER set utf8')cur.execute('USE doubanmovie')cur.execute("""CREATE TABLE doubantop250(ID INT (3) PRIMARY KEY NOT NULL AUTO_INCREMENT,title VARCHAR (100),movieinfo VARCHAR (1000),star FLOAT (3,1) NOT NULL ,quote VARCHAR (300) NOT NULL )CHARACTER SET utf8;""")con.commit()cur.close()con.close()
scrapy 官方文档:
https://www.osgeo.cn/scrapy/topics/downloader-middleware.html
5. scrapy命令行工具
2. scrapy命令行工具Available commands:bench Run quick benchmark testfetch Fetch a URL using the Scrapy downloadergenspider Generate new spider using pre-defined templatesrunspider Run a self-contained spider (without creating a project)settings Get settings valuesshell Interactive scraping consolestartproject Create new projectversion Print Scrapy versionview Open URL in browser, as seen by Scrapy------------------------------------------------------------1)scrapy startproject project_name在scrapy项目目录下 创建project_name工程2)scrapy genspider name domain在当前的文件夹下创建爬虫,其中name是爬虫的名称domain用于生成爬虫文件属性的allowd_domain以及start_urlsscrapy genspider -l调用爬虫模板Available templates:basiccrawlcsvfeedxmlfeedscrapy genspider example example.comCreated spider 'example' using template 'basic' in module:myProject.spiders.example3)scrapy crawl spider_name开始爬虫4)scrapy check检查错误5)scrapy list列出当前项目中可用的爬虫代码,按行6) scrapy edit spider_name编辑或调试爬虫代码7)scrapy fetch url使用scrapy下载器对给定的url进行内容输出8)scrapy view url在浏览器中打开给定的url9)scrapy parse url页面解析,解析结果通过callback选项传递10)scrapy runspider spider_file.py运行爬虫文件11)scrapy version查看版本号12)scrapy bench运行快速基准测试
6.Spider文件夹
2. Spider文件夹:爬虫部分完成的操作有哪些?抓取网页信息提取格式化数据框架中需要做哪些事情?1)生成御用抓取的url然后指定请求方式下下在相应的回调函数start_requests():指定了url,callback参数指定parse方法parse():获取页面数据2)回调函数解析网页,返回带有提取数据的Item对象, Request请求对象,然后执行scrapy下载3)回调函数中使用parse方法解析4)从返回数据的item项目中进行持久化
7. pycharm操作数据库
pycharm可以操作数据库DataBase->'+'->Data Source->MySQL->参数配置:HOSTDatabaseUserPassword
8. scrapy爬豆瓣
8.1 scrapy startproject doubanmovie
切换terminal目录:cd doubanmovie
8.2 编辑保存数据的容器文件:items.py
import scrapyclass DoubanmovieItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field() # 电影名称movieinfo = scrapy.Field() # 电影描述信息star = scrapy.Field() # 电影评分quote = scrapy.Field() # 电影经典台词pass
8.3 切换terminal目录:cd doubanmovie
创建爬虫文件(terminal下运行)
scrapy genspider doubanspider douban.com(域名)
编辑爬虫文件:doubanspider.py
import scrapyfrom scrapy.http import Request # 发送请求的模块from scrapy.selector import Selector # 解析响应的模块方法-选择器from doubanmovie.items import DoubanmovieItem # 导入容器from urllib.parse import urljoin # url补全功能#要爬取的对象class DoubanspiderSpider(scrapy.Spider):name = 'doubanspider'allowed_domains = ['douban.com']start_urls = ['https://movie.douban.com/top250']def parse(self, response):item = DoubanmovieItem() # 创建容器selector = Selector(response) # 创建选择器 #解析Movies = selector.xpath('') # 页面中整体电影所在区域(''中是大盒子的xpath)# 循环中获取每一项电影信息for eachMovie in Movies:# 解析每部电影采集的四条信息title = eachMovie.xpath('').extract()movieinfo = eachMovie.xpath('').extract()star = eachMovie.xpath('').extract()quote = eachMovie.xpath('').extract()if quote:quote = quote[0]else:quote = ''# 解析内容保存至容器item['title'] = titleitem['movieinfo'] = movieinfoitem['star'] = staritem['quote'] = quoteyield item# 解析多页nextLink = selector.xpath('').extract()if nextLink:nextLink = nextLink[0]yield Request(urljoin(response.url, nextLink), callback=self.parse)
8.4 settings.py文件
加入浏览器代理配置、数据库配置、数据传输配置
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
数据库配置:
MYSQL_HOST = 'localhost'
MYSQL_DBNAME = 'doubanmovie'
MYSQL_USER = 'root'
MYSQL_PASSWD = '123456'
管道文件配置:
ITEM_PIPELINES = {
'doubanmovie.pipelines.DoubanmoviePipeline': 300,
}
8.5 配置pipelines.py文件(以实现持久化存储)
# 连接数据库,导入settings.py中数据库配置import pymysqlfrom doubanmovie import settingsclass DoubanmoviePipeline(object):def __init__(self):# 创建连接对象属性,读取参数来自于settings.pyself.connect = pymysql.connect(host = settings.MYSQL_HOST,db = settings.MYSQL_DBNAME,user = settings.MYSQL_USER,passwd = settings.MYSQL_PASSWD,charset = 'utf8',use_unicode = True # unicode编码)self.cursor = self.connect.cursor() #创建游标#持久化存储的配置def process_item(self, item, spider):try:self.cursor.execute("""insert into doubantop250(title, movieinfo, star, quote)value (%s,%s,%s,%s)""",(item['title'],item['movieinfo'],item['star'],item['quote']))self.connect.commit()except Exception as e:print(e)return item
8.6 爬:scrapy crawl doubanspider
爬虫基础09B—scrapy爬虫相关推荐
- Python 网络爬虫笔记9 -- Scrapy爬虫框架
Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...
- 爬虫基础分享Scrapy框架流程图与安装
从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑.所以,我们一起 ...
- 【爬虫笔记】Scrapy爬虫技术文章网站
文章目录 一.Xpath 1.xpath简介 2.xpath语法 二.CSS选择器 三.爬取伯乐在线--初级 1.创建Scrapy项目 2.编写item.py文件 3.编写spider文件 4.编写p ...
- 【爬虫基础】Python爬虫
Python爬虫基础 对象序列化 对象序列化 序列化 对象序列化 程序运行时能将内存中的对象.信息直接保存下来的机制,称为对象序列化 对象反序列化 将保存的数据读取并转换为存储区域的对象信息,称之为对 ...
- python爬虫基础(一)~爬虫概念和架构
目录 1. 爬虫 1.1 概念 1.2 分类 2. 爬虫架构 2.1 url管理器 2.2 网页(html)下载(download)器 2.2.1 urllib下载html源码 2.2.2 reque ...
- 【scrapy爬虫】了解Scrapy+爬虫豆瓣电影Top250信息
Scrapy爬虫框架 scrapy是什么 它是一个快速功能强大的开源网络爬虫框架 Github地址:https://github.com/scrapy/scrapy 官网地址:https://scra ...
- 零、爬虫基础(通用爬虫)
一.response响应参数 1.response六个参数 response.read().decode().encode() # decode()解码 encode()编码 response.rea ...
- 爬虫基础(五)-----scrapy框架简介
---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...
- python爬虫基础教程1_Python爬虫系列(一)入门教学
" 启 大家好,我是新来的小编小周.今天给大家带来的是python爬虫入门, 文章以简为要,引导初学者快速上手爬虫.话不多说,我们开始今天的内容. 在初步学习爬虫之前,我们先用一个例子来看看 ...
- Scrapy爬虫实践之搜索并获取前程无忧职位信息(基础篇)
一.开发环境 OS:Windows 7 64bit旗舰版 Python:2.7.10 Scrapy:1.0.3 ...
最新文章
- 【组队学习】【35期】深入浅出Pytorch
- [Bat]UNC路径不支持的2种解决方法
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
- 实时滚动图表绘制方法: LightningChart教程 + 源码下载
- 某业务付费统计脚本问题排查
- 解决U盘无法拷贝大文件问题
- 云开发新能力,支持 HTTP 调用 API
- android音乐播放器文章,Android复习09【内容提供者、音乐播放器】
- Angular自动取消订阅RxJs
- 施一公:如何提高英文的科研写作能力
- linux打开lua后中文有乱码,总结Lua使用中遇到的小问题
- matlab中a k,Python:相当于Matlab的大型数组的svds(A,k)?
- 高中信息技术—Python常见关键字及函数中英文对照
- SSI与Biss、Endat、Hipeface
- 小试OKR一季度之后有感分享,你要不要试试ORK?
- alpine安装curl
- Project2019入门到精通
- 10分钟健身法读书笔记(5/5)
- 中南林业科技大学的计算机研究生分数线,2020中南林业科技大学研究生分数线(以及历年复试)...
- 重装电脑系统(参考)