目录

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爬虫相关推荐

  1. Python 网络爬虫笔记9 -- Scrapy爬虫框架

    Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...

  2. 爬虫基础分享Scrapy框架流程图与安装

    从头开发一个爬虫程序是一项烦琐的工作,为了避免因制造轮子而消耗大量时间,在实际应用中我们可以选择使用一些优秀的爬虫框架,使用框架可以降低开发成本,提高程序质量,让我们能够专注于业务逻辑.所以,我们一起 ...

  3. 【爬虫笔记】Scrapy爬虫技术文章网站

    文章目录 一.Xpath 1.xpath简介 2.xpath语法 二.CSS选择器 三.爬取伯乐在线--初级 1.创建Scrapy项目 2.编写item.py文件 3.编写spider文件 4.编写p ...

  4. 【爬虫基础】Python爬虫

    Python爬虫基础 对象序列化 对象序列化 序列化 对象序列化 程序运行时能将内存中的对象.信息直接保存下来的机制,称为对象序列化 对象反序列化 将保存的数据读取并转换为存储区域的对象信息,称之为对 ...

  5. python爬虫基础(一)~爬虫概念和架构

    目录 1. 爬虫 1.1 概念 1.2 分类 2. 爬虫架构 2.1 url管理器 2.2 网页(html)下载(download)器 2.2.1 urllib下载html源码 2.2.2 reque ...

  6. 【scrapy爬虫】了解Scrapy+爬虫豆瓣电影Top250信息

    Scrapy爬虫框架 scrapy是什么 它是一个快速功能强大的开源网络爬虫框架 Github地址:https://github.com/scrapy/scrapy 官网地址:https://scra ...

  7. 零、爬虫基础(通用爬虫)

    一.response响应参数 1.response六个参数 response.read().decode().encode() # decode()解码 encode()编码 response.rea ...

  8. 爬虫基础(五)-----scrapy框架简介

    ---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...

  9. python爬虫基础教程1_Python爬虫系列(一)入门教学

    " 启 大家好,我是新来的小编小周.今天给大家带来的是python爬虫入门, 文章以简为要,引导初学者快速上手爬虫.话不多说,我们开始今天的内容. 在初步学习爬虫之前,我们先用一个例子来看看 ...

  10. Scrapy爬虫实践之搜索并获取前程无忧职位信息(基础篇)

    一.开发环境 OS:Windows 7 64bit旗舰版                Python:2.7.10                Scrapy:1.0.3               ...

最新文章

  1. 【组队学习】【35期】深入浅出Pytorch
  2. [Bat]UNC路径不支持的2种解决方法
  3. 20155303 2016-2017-2 《Java程序设计》第二周学习总结
  4. 实时滚动图表绘制方法: LightningChart教程 + 源码下载
  5. 某业务付费统计脚本问题排查
  6. 解决U盘无法拷贝大文件问题
  7. 云开发新能力,支持 HTTP 调用 API
  8. android音乐播放器文章,Android复习09【内容提供者、音乐播放器】
  9. Angular自动取消订阅RxJs
  10. 施一公:如何提高英文的科研写作能力
  11. linux打开lua后中文有乱码,总结Lua使用中遇到的小问题
  12. matlab中a k,Python:相当于Matlab的大型数组的svds(A,k)?
  13. 高中信息技术—Python常见关键字及函数中英文对照
  14. SSI与Biss、Endat、Hipeface
  15. 小试OKR一季度之后有感分享,你要不要试试ORK?
  16. alpine安装curl
  17. Project2019入门到精通
  18. 10分钟健身法读书笔记(5/5)
  19. 中南林业科技大学的计算机研究生分数线,2020中南林业科技大学研究生分数线(以及历年复试)...
  20. 重装电脑系统(参考)

热门文章

  1. Web 前端学习 案例三之制作网页表单
  2. PhotoshopPS软件快捷键教程
  3. mybatis事务处理
  4. Shopee平台有哪些电商大促活动?大促活动如何报名?
  5. 同时删除多个 Excel 文档空白行
  6. 每日简报 5月2日简报新鲜事 每天一分钟 了解新鲜事
  7. 2016年5月27日更新后MSYS2的shell用法
  8. coding部署博客 + 腾讯云 cdn 踩坑日记
  9. SpringBoot整合MyBatis(七)
  10. excle自动查找,自动匹配数据;查找对比两个相同的但顺序错乱的表格内容。