scrapy

scrapy介绍安装--架构

Scrapy 是一个爬虫框架(底层代码封装好了,只需要在固定位置写固定代码即可),应用领域比较广泛---》爬虫界的django# 安装
#Windows平台1、pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs3、pip3 install lxml4、pip3 install pyopenssl5、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted7、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl8、pip3 install scrapy#Linux,mac平台1、pip3 install scrapy# scrapy架构
# 引擎(EGINE):引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。大总管,负责整个爬虫数据的流动# 调度器(SCHEDULER)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址#下载器(DOWLOADER) 用于下载网页内容, 并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的(效率很高,同时可以发送特别多请求出出)#爬虫(SPIDERS) SPIDERS是开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求#项目管道(ITEM PIPLINES) 在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作# 下载器中间件(Downloader Middlewares)位于Scrapy引擎和下载器之间,主要用来处理从EGINE传到DOWLOADER的请求request,已经从DOWNLOADER传到EGINE的响应response,你可用该中间件做以下几件事# 爬虫中间件(Spider Middlewares)位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入(即responses)和输出(即requests)# 创建scrapy项目---》使用命令# 创建项目-scrapy startproject 项目名字# 创建爬虫 -scrapy genspider cnblogs www.cnblogs.com# 启动爬虫scrapy crawl cnblogs# 使用脚本运行爬虫
# run.py
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'cnblogs','--nolog'])

 

scrapy项目目录结构

mysfirstscrapy  # 项目名mysfirstscrapy # 包spiders    # 包,里面放了自定义的爬虫,类似于app__init__.pybaidu.py  # 百度爬虫cnblogs.py#cnblogs爬虫items.py      #类似于django的 models表模型,一个个模型类middlewares.py # 中间件pipelines.py #管道---》写持久化settings.py #项目配置文件scrapy.cfg  # 项目上线配置# 后期我们只关注spiders中得爬虫和pipelines持久化即可

scrapy解析数据

1 response对象有css方法和xpath方法-css中写css选择器-xpath中写xpath选择
2 重点1:-xpath取文本内容'.//a[contains(@class,"link-title")]/text()'-xpath取属性'.//a[contains(@class,"link-title")]/@href'-css取文本'a.link-title::text'-css取属性'img.image-scale::attr(src)'
3 重点2:.extract_first()  取一个.extract()        取所有
import scrapy# 爬虫类,继承了scrapy.Spider
class CnblogsSpider(scrapy.Spider):name = 'cnblogs'  # 爬虫名字allowed_domains = ['www.cnblogs.com']  # 允许爬取的域---》start_urls = ['http://www.cnblogs.com/']  # 开始爬取的地址# css解析解析方法# def parse(self, response):#     # print(response.text) # http响应包装成了response#     # scrapy 内置了解析库,不需要使用第三方:支持xpath和css#     ######css选择器######     # 解析出所有文章#     article_list = response.css('article.post-item')  # 列表中放对象#     print(len(article_list))#     # 继续解析文章详情:文章标题,文章摘要,作者图片,作者名字,文章详情地址#     for article in article_list:#         title = article.css('section>div>a.post-item-title::text').extract_first()#         desc = article.css('p.post-item-summary::text').extract()#         real_desc = desc[0].replace('\n', '').replace(' ', '')#         if real_desc:#             desc = real_desc#         else:#             real_desc = desc[1].replace('\n', '').replace(' ', '')#             desc = real_desc#         author_img = article.css('p.post-item-summary img::attr(src)').extract_first()#         author_name = article.css('footer.post-item-foot span::text').extract_first()#         url = article.css('div.post-item-text a::attr(href)').extract_first()#         print('''#         文章名字:%s#         文章摘要:%s#         作者图片:%s#         作者名字:%s#         文章地址:%s#         ''' % (title, desc, author_img, author_name, url))def parse(self, response):######xpath选择器###### 解析出所有文章article_list = response.xpath('//article[contains(@class,"post-item")]')  # 列表中放对象print(len(article_list))# 继续解析文章详情:文章标题,文章摘要,作者图片,作者名字,文章详情地址for article in article_list:# title = article.xpath('./section/div/a/text()').extract_first()title = article.xpath('.//a/text()').extract_first()desc = article.xpath('.//p[contains(@class,"post-item-summary")]/text()').extract()real_desc = desc[0].replace('\n', '').replace(' ', '')if real_desc:desc = real_descelse:real_desc = desc[1].replace('\n', '').replace(' ', '')desc = real_desc# p.post-item-summary img::attr(src)author_img = article.xpath('.//p//img/@src').extract_first()#div.post-item-text a::attr(href)author_name = article.xpath('.//footer//span/text()').extract_first()url = article.xpath('.//div[contains(@class,"post-item-text")]//a/@href').extract_first()print('''文章名字:%s文章摘要:%s作者图片:%s作者名字:%s文章地址:%s''' % (title, desc, author_img, author_name, url))'''
一启动爬虫:把start_urls地址包装成request对象---》
丢给引擎---》调度器---》排队---》引擎---》下载中间件---》下载器---》下载完成---》引擎---》爬虫----》就回到了parse'''

setting配置

基础配置

#1 了解
BOT_NAME = "firstscrapy"  #项目名字,整个爬虫名字
#2 爬虫存放位置    了解
SPIDER_MODULES = ["firstscrapy.spiders"]
NEWSPIDER_MODULE = "firstscrapy.spiders"#3  记住 是否遵循爬虫协议,一般都设为False
ROBOTSTXT_OBEY = False
# 4 记住
USER_AGENT = "firstscrapy (+http://www.yourdomain.com)"#5  记住  日志级别
LOG_LEVEL='ERROR'#6   记住 DEFAULT_REQUEST_HEADERS 默认请求头
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',
}#7 记住 后面学  SPIDER_MIDDLEWARES 爬虫中间件
SPIDER_MIDDLEWARES = {'cnblogs.middlewares.CnblogsSpiderMiddleware': 543,
}
#8 后面学 DOWNLOADER_MIDDLEWARES  下载中间件
DOWNLOADER_MIDDLEWARES = {'cnblogs.middlewares.CnblogsDownloaderMiddleware': 543,
}#9 后面学 ITEM_PIPELINES 持久化配置
ITEM_PIPELINES = {'cnblogs.pipelines.CnblogsPipeline': 300,
}

高级配置(提高爬虫效率--scarpy框架)

#1 增加并发:默认16
默认scrapy开启的并发线程为32个,可以适当进行增加。在settings配置文件中修改
CONCURRENT_REQUESTS = 100
值为100,并发设置成了为100。#2 降低日志级别:
在运行scrapy时,会有大量日志信息的输出,为了减少CPU的使用率。可以设置log输出信息为INFO或者ERROR即可。在配置文件中编写:
LOG_LEVEL = 'INFO'# 3 禁止cookie:
如果不是真的需要cookie,则在scrapy爬取数据时可以禁止cookie从而减少CPU的使用率,提升爬取效率。在配置文件中编写:
COOKIES_ENABLED = False# 4 禁止重试:
对失败的HTTP进行重新请求(重试)会减慢爬取速度,因此可以禁止重试。在配置文件中编写:
RETRY_ENABLED = False# 5 减少下载超时:
如果对一个非常慢的链接进行爬取,减少下载超时可以能让卡住的链接快速被放弃,从而提升效率。在配置文件中进行编写:
DOWNLOAD_TIMEOUT = 10 超时时间为10s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#调用cpp库,debug时不进入cpp函数

选中c#的项目,右击属性,进入属性页,点击调试,点击打开调试启动配置文件UI,打开启用本机代码调试。

相机标定学习笔记

Kalibr 是标定工具中,唯一一个可以标定camToImu的,是vio必不可少的工具,其他的都有替代品。所以学习多种开源算法进行相机标定,并记录学习相机标定的过程。 一、相机标定 1、在场景中放置一个已知的物体 (1&#xff…

初探 Seaborn:Python 数据可视化入门

Seaborn 是一个基于 Matplotlib 的 Python 数据可视化库,它提供了更高级别的接口,使得创建美观的统计图形变得非常简单。在这篇文章中,我们将讨论 Seaborn 的基础使用方法,包括如何创建各种常见的统计图形。 一、安装和导入 Seab…

MySQL的四种主要存储引擎

目录 (一)MyISAM (二)InnoDB 1)自动增长列: 2)外键约束: (三)MEMORY (四)MERGE 什么是存储引擎? 对MySQL来说,它提供了存储不…

【wifi模块选型指导】数据传输WiFi模块的选型参考_USB/UART接口WiFi模块

数据传输WiFi模块有USB接口和UART接口两大类,为满足行业客户的不同应用需求,SKYLAB研发推出了多款2.4GHz单频,2.4/5GHz双频的USB接口WiFi模块和UART接口WiFi模块,数据传输能力,传输距离各有不同。怎么选才是最适合的呢…

基于ResNet50算法实现图像分类识别

概要 在本文中将介绍使用Python语言,基于TensorFlow搭建ResNet50卷积神经网络对四种动物图像数据集进行训练,观察其模型训练效果。 一、目录 ResNet50介绍 图片模型训练预测 项目扩展 二、ResNet50介绍 ResNet50是一种基于深度卷积神经网络&#xff…

性能测试需求分析怎么做?(中)

本系列文章我们为大家系统地介绍一下性能测试需求分析,让大家全面掌握性能测试的第一个环节。本系列文章将会从性能测试需求分析整体概述、性能测试需求分析内容、性能测试需求分析方法这三个方面进行展开。在(上)部分中,我们为大…

238. 除自身以外数组的乘积

题目描述&#xff1a; 主要思路&#xff1a; 正逆各扫一遍&#xff0c;利用数组存储当前数左边和右边的乘积。 class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int nnums.size();vector<int> ans;int l[n1],r[n1];l[0]1,…

打家劫舍问题

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存放金额的…

python将dataframe数据导入MongoDB非关系型数据库

文章目录 pymongo连接新建数据库和集合pandas导入数据插入数据数据查看 pymongo连接 import pymongo client pymongo.MongoClient("mongodb://localhost:27017/") dblist client.list_database_names() for db in dblist:print(db) #查看已有数据库admin bilibil…

算法设计方法之贪心算法

贪心算法 介绍 贪心算法是算法设计的一种方法。期盼通过每个阶段的局部最优选择&#xff0c;从而达到全局的最优。但结果不一定是最优的。 基础案例 场景一 零钱兑换 现有硬币 1 元、2 元、5 元&#xff0c;需要用最少的硬币数量凑够 11 元。 利用贪心算法实现&#xff…

【微信小程序】实现点击+号弹出一个附着旁边的弹窗进行多个方式的选择

在微信小程序中&#xff0c;你可以使用小程序的组件和事件来实现点击号弹出一个附着在号旁边的弹窗&#xff0c;以进行多个方式的选择。以下是一个示例代码&#xff1a; 在wxml文件中&#xff0c;创建一个按钮&#xff0c;并为按钮绑定一个点击事件&#xff1a; <view cla…

【kubernetes系列】kubernetes之计算资源管理

资源类型 在 Kubernetes 中&#xff0c;Node 提供资源&#xff0c;而 Pod 使用资源。其中资源分为计算&#xff08;CPU、Memory、GPU&#xff09;、存储&#xff08;Disk、SSD&#xff09;、网络&#xff08;Network Bandwidth、IP、Ports&#xff09;。这些资源提供了应用运行…

开启了代理,但是git仍然连接拒绝的解决方法

开启了代理&#xff0c;但是git仍然连接拒绝的原因&#xff1a; windows 中 git 默认不会使用系统代理&#xff0c;所以即使连接代理或者打开代理软件&#xff0c;浏览器仍然可以访问 GitHub 或 Gitee&#xff1b;但是使用 git 命令行连接 GitHub 或 Gitee 远程仓库可能会出现…

【LLM】Langchain使用[二](模型链)

文章目录 1. SimpleSequentialChain2. SequentialChain3. 路由链 Router Chain Reference 1. SimpleSequentialChain 场景&#xff1a;一个输入和一个输出 from langchain.chat_models import ChatOpenAI #导入OpenAI模型 from langchain.prompts import ChatPromptTempla…

自动化测试之数据驱动与关键字驱动

目录 1.录制/回放的神话 2.数据驱动的自动化测试框架 3.关键字驱动的自动化测试 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须&#xff0c;不就是参数和函数其嘛&#xff01;其实其也体现了测试所不同与开发的一些特点&…

目标检测——R-CNN网络基础

目录 Overfeat模型RCNN模型算法流程候选区域生成CNN网络提取特征目标分类&#xff08;SVM&#xff09;目标定位预测过程 算法总结 Fast RCNN模型算法流程ROI Pooling目标分类和回归 模型训练模型总结 Overfeat模型 RCNN模型 算法流程 候选区域生成 CNN网络提取特征 目标分类&am…

机器学习1

核心梯度下降算法&#xff1a; import numpy as np from utils.features import prepare_for_trainingclass LinearRegression:def __init__(self,data,labels,polynomial_degree 0,sinusoid_degree 0,normalize_dataTrue):"""1.对数据进行预处理操作2.先得到…

Python-Web框架flask使用

目录 1.Web框架 1.1 flask 1.1.1 debug调试 1.1.2 定义参数web服务 获取字符串 ​编辑 1.1.3 html网页渲染 1.13.1 带参数传给网页文件 普通元素 列表元素 字典元素 1.Web框架 1.1 flask python的web框架&#xff0c;目录结构如下&#xff1a; 1.static存放的是css,…

Windows7中使用SRS集成音视频一对一通话

SRS早就具备了SFU的能力&#xff0c;比如一对一通话、多人通话、直播连麦等等。在沟通中&#xff0c;一对一是常用而且典型的场景&#xff0c; 让我们一起来看看如何用SRS做直播和RTC一体化的一对一通话。 一、启动windows7-docker 二、拉取SRS镜像 执行命令:docker pull oss…