Python网络爬虫之scrapy框架

简介: Python网络爬虫之scrapy框架

Python网络爬虫与信息提取 - 嵩天


官网:https://scrapy.org/


安装:pip install scrapy


检测:scrapy -h


scrapy爬虫框架结构

image.png


爬虫框架
    - 爬虫框架 是实现爬虫功能的一个软件结构和功能组件集合
    - 爬虫框架 是一个半成品,能够帮助用户实现专业网络爬虫
5+2结构
    - Scheduler  
        - 用户不修改
        - 对所有爬取请求进行调度管理
    - Engine  
        - 用户不修改
        - 控制数据流,根据条件触发事件
    - Downloader  
        - 用户不修改
        - 根据请求下载网页
    - Spider  
        - 用户配置代码
        - 解析downloader返回的响应Response
        - 产生爬取项scrapy item 
        - 产生额外的爬取请求Request
    - Item-Piplines 
        - 用户配置代码
        - 以流水线方式处理Spider产生的爬取项
        - 由一组操作顺序组成,类似流水线
        - 每个操作是一个Item Pipeline类型
        - 操作:清理,检验和查重爬取项中的HTML数据,将数据存储到数据库
    - Spider-middleware  
        - 用户配置代码
        - 目的:对请求和爬取项在处理
        - 功能:修改,丢弃,新增请求或爬取项
    - Downloader-middleware  
        - 用户配置代码
        - 用户可配置的控制,
        - 修改,丢弃,新增请求或响应
3个数据流
    简单配置,即可完成功能
requests vs. scrapy
requests库
    - 页面级爬虫
    - 功能库
    - 并发性考虑不足,性能较差
    - 重点在于页面下载
    - 定制灵活
    - 上手十分简单
scrapy框架
    - 网站级爬虫
    - 框架
    - 并发性好,性能较高
    - 重点在于爬虫结构
    - 一般定制灵活,深度定制困难
    - 入门稍难
scrapy常用命令
- startproject 创建一个新工程
    scrapy startproject <name> [dir]
- genspider 创建一个爬虫
    scrapy genspider [options] <name> <domain>
- settings 获得爬虫配置信息
    scrapy settings [options]
- crawl 运行一个爬虫
    scrapy crawl <spider>
- list 列出工程中所有爬虫
    scrapy list
- shell 启动url调试命令行      
    scrapy shell [url]
- 保存日志
    scrapy crawl <spder_name> -s LOG_FILE=scrapy.log

使用scrapy步骤:

新建项目project -》明确目标item -》 编写爬虫spdier -》 存储内容pipeline
- 建立一个scrapy爬虫工程
    scrapy startproject firstspider
- 工程中产生一个scrapy爬虫
    scrapy genspider demo demo.com
- 配置产生的spider爬虫
    - 编写Spider 
        - start_requests(),产生请求request
        - parse(),处理响应response
    - 编写Item Pipeline
    - 优化配置策略
- 运行爬虫,获取网页
    scrapy crawl demo

工程目录

firstspider/               外层目录
    scrapy.cfg             部署Scrapy爬虫的配置文件
    firstspider/           Scrapy框架的用户自定义Python代码        
        __init__.py        初始化脚本           
        items.py           Items代码模板(继承类)          
        middlewares.py     Middlewares代码模板(继承类)     
        pipelines.py       Pipelines代码模板(继承类)  
        settings.py        Scrapy爬虫的配置文件 
        __pycache__        缓存目录,无需修改
        spiders/           Spiders代码模板目录(继承类)
            __init__.py    初始文件,无需修改
            __pycache__    缓存目录,无需修改

yield 生成器

- 包含yield语句的函数是一个生成器
- 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值
- 生成器是一个不断产生值的函数

scrapy数据类型

- Request类
    - class scrapy.http.Request()
    - Request对象表示一个HTTP请求
    - 由Spider生成,由Downloader执行
    - 属性或方法
        - url Request对应的请求URL地址
        - method 对应的请求方法,'GET' 'POST'等
        - headers 字典类型风格的请求头
        - body 请求内容主体,字符串类型
        - meta 用户添加的扩展信息,在Scrapy内部模块间传递信息使用
        - copy() 复制该请求          
- Response类
    - class scrapy.http.Response()
    - Response对象表示一个HTTP响应
    - 由Downloader生成,由Spider处理
    - 属性或方法
        - url Response对应的URL地址
        - status HTTP状态码,默认是200
        - headers Response对应的头部信息
        - body Response对应的内容信息,字符串类型
        - flags 一组标记
        - request 产生Response类型对应的Request对象
        - copy() 复制该响应
- Item类
    - class scrapy.item.Item()
    - Item对象表示一个从HTML页面中提取的信息内容
    - 由Spider生成,由Item Pipeline处理
    - Item类似字典类型,可以按照字典类型操作

Scrapy爬虫信息提取方法

- Beautiful Soup
- lxml
- re
- XPath Selector
- CSS Selector
    <html>.css("a::attr(href)").extract()

settings.py文件优化配置

CONCURRENT_REQUESTS Downloader最大并发请求下载数量,默认32
CONCURRENT_ITEMS Item Pipeline最大并发ITEM处理数量,默认100
CONCURRENT_REQUESTS_PER_DOMAIN 每个目标域名最大的并发请求数量,默认8
CONCURRENT_REQUESTS_PER_IP 每个目标IP最大的并发请求数量,默认0,非0有效

技术路线展望

- requests + beautifulsoup + re
- scrapy
- 解析js:phantomjs
- 表单提交,爬取周期,入库存储
- 扩展scrapy-*

scrapy爬虫的地位

- python语言最好的爬虫框架
- 具备企业级专业爬虫的扩展性(7x24)
- 千万级url爬取管理与部署
- scrapy足以支撑一般商业服务

scrapy爬虫的应用高阶价值

基于docker,虚拟化部署
中间件扩展,增加调度和监控
各种反爬取对抗技术

代码实例

# demo.py
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['python123.io']
    # start_urls = ['https://python123.io/ws/demo.html']
    # 两者等价
    def start_requests(self):
        urls = [
            'https://python123.io/ws/demo.html'
            ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)
    def parse(self, response):
        filename = response.url.split("/")[-1]
        with open(filename, "wb") as f:
            f.write(response.body)
        self.log("filename : %s was saved!"%filename)

python2中解决中文乱码的方法,在文件头部加入以下代码:


import sys
reload(sys)
sys.setdefaultencoding("utf-8")
相关文章
|
8天前
|
数据采集 数据挖掘 Python
Python:pandas做爬虫
Python:pandas做爬虫
21 0
|
1天前
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
102 66
|
1天前
|
数据采集 存储 JavaScript
构建你的第一个Python网络爬虫
【9月更文挑战第34天】在数字信息泛滥的时代,快速有效地获取和处理数据成为一项重要技能。本文将引导读者通过Python编写一个简易的网络爬虫,实现自动化地从网页上抓取数据。我们将一步步走过代码的编写过程,并探讨如何避免常见陷阱。无论你是编程新手还是想扩展你的技术工具箱,这篇文章都将为你提供有价值的指导。
30 18
|
11天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
24 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
5天前
|
数据采集 存储 XML
构建高效的Python爬虫系统
【9月更文挑战第30天】在数据驱动的时代,掌握如何快速高效地获取网络信息变得至关重要。本文将引导读者了解如何构建一个高效的Python爬虫系统,从基础概念出发,逐步深入到高级技巧和最佳实践。我们将探索如何使用Python的强大库如BeautifulSoup和Scrapy,以及如何应对反爬措施和提升爬取效率的策略。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,帮助你在信息收集的海洋中航行得更远、更深。
19 6
|
4天前
|
数据采集 数据挖掘 数据处理
Python中实现简单爬虫并处理数据
【9月更文挑战第31天】本文将引导读者理解如何通过Python创建一个简单的网络爬虫,并展示如何处理爬取的数据。我们将讨论爬虫的基本原理、使用requests和BeautifulSoup库进行网页抓取的方法,以及如何使用pandas对数据进行清洗和分析。文章旨在为初学者提供一个易于理解的实践指南,帮助他们快速掌握网络数据抓取的基本技能。
15 3
|
8天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
33 5
|
8天前
|
数据采集 Python
天天基金数据的Python爬虫
天天基金数据的Python爬虫
24 3
|
11天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
7天前
|
数据采集 JSON 数据格式
Python:南京地铁每日客流数据的爬虫实现
Python:南京地铁每日客流数据的爬虫实现
20 1
下一篇
无影云桌面