scrapy获取a标签的连接_Python爬虫 scrapy框架初探及实战!

Scrapy框架安装

操作环境介绍

操作系统:Ubuntu19.10

Python版本:Python3.7.4

编译器:pycharm社区版

安装scrapy框架(linux系统下)

安装scrapy框架最繁琐的地方在于要安装很多的依赖包,若缺少依赖包,则scrapy框架的安装就会报错。

不过anaconda环境中会自带lxml模块,可以免去一些步骤

在终端输入命令安装依赖包

sudo apt-get install python-dev
sudo apt-get install libevent-dev

2758aa7549a19eea6e5ee763c5b8bdc5.png

根据提示输入y确认安装,耐心等待安装完成即可

安装完所需要的依赖包之后,就可以直接用pip安装scrapy框架了

pip install scrapy

在终端输入命令后,可能会出现网络响应超时等报错

daefdf2120f69b9e242b3780f05e9bdc.png

经过几次的尝试之后,我认为这是软件源的问题导致下载过慢,建议更换清华的镜像源来安装

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

在命令的末尾加上-i来暂时使用指定的镜像源来安装scrapy框架

在排除其他问题的影响后,若安装速度依旧不理想,可多尝试几个源来安装

阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

5982f3b2253c20be5102f487c172283f.png

ok,我们可以看到更换源之后的下载速度有了显著的提升,只需要等待几秒钟就可以看到安装成功的标志

检测安装是否成功

打开终端,输入命令查看scrapy版本

scrapy --version

看到类似下图所示的版本信息:

3b44ca53b80bd067d1256a7f01a734d7.png

再输入命令

scrapy bench

这条命令是调用scrapy去爬取一个空网址的内容,再输入命令之后,看到scrapy正在运行去爬取空网址的内容即安装成功了这个框架

82d5e7fc00601ea94df6995727d872af.png

Scrapy框架爬取原理

Scrapy框架的主体结构分为五个部分:

Scrapy Engine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。

它还有两个可以自定义下载功能的中间件:

Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):一个可以自定扩展和操作引擎和Spider中间通信的功能组件。

Scrapy框架运行方式

fc6f05d2c69d15498a6f7cff7e49a8d4.png

由上图可以看出,引擎就相当于框架中的大脑,调配着其他部分的运作。

首先爬虫文件向引擎发送网址请求,在经由引擎将网址发送给调度器,调度器通过内部的函数将发来的网址进行队列操作,将排好队的网址重新发送回引擎。引擎接收到了发送回来的队列之后,便将请求交给下载器,由下载器从外部网页获取网页源码,将获取到的响应数据再发送回引擎。引擎接收到下载器发回的网页源码之后,再将数据传回爬虫文件,由爬虫文件负责对html数据的提取,等到数据提取完毕,再把数据发送给引擎。引擎对爬虫文件发送来的内容进行检测,若判断传过来的内容为数据,则引擎将数据发送给专门保存文件的管道数据,管道文件接收到发来的数据之后,就可以有选择的保存在数据库或文件中。

至此,一次完整的爬虫项目运行完成。

Scrapy框架实例

使用Scrapy爬取阿里文学

使用scrapy框架爬取的一般步骤

1.创建爬虫项目

2.创建爬虫文件

3.编写爬虫文件

4.编写items

5.编写pipelines

6.配置settings

7.运行scrapy框架

注:上面的步骤是使用scrapy的一般步骤,实际操作时可以根据爬取页面的难易度来调整这些步骤

1.创建爬虫项目

首先找到一个文件夹,用于保存项目的内容

打开终端,在该目录下输入:

scrapy startproject [项目名称]

成功创建

16f5782ae3a7d1b8d7f4c18f7f86bebb.png

这时可以发现文件夹下多了一个以项目名称命名的文件夹

71618082bb7686fa63f8624873066b52.png

进入文件夹,发现里面已经有了框架的模板文件

1a91e67299162a100c6ffb9d0d967df4.png

init .py //初始文件

items.py//定义目标,想要爬什么信息

pipelines.py//爬后处理

middlewares.py//中间键

settings.py//文件的设置信息

2.创建爬虫文件

scrapy genspider [爬虫名] [想要爬取网址的域名]

注意:爬虫名一定不能与项目名一样,否则会创建失败

21c384bef3fed1ee4a5af95e8dc6139a.png

3.分析文件,编写爬虫文件

我们在上一步创建了爬虫文件之后会发现多出来一个py文件在项目名目录下

4e7ca626258c852aec89d342dd22f03d.png

打开aliwx.py文件,开始分析网页,提取想要爬取的信息

打开阿里文学的官网首页,先设定我们想要爬取的内容为最近更新的书名及章节,使用xpath语法进行提取

42b6b15d8edab105d33c5b96bac84c97.png

打开项目文件夹下的spider文件夹,再打开我们刚刚所创建的爬虫文件

打开后可以看到一个基础的爬虫框架,我们要根据实际的需要来修改这个框架的内容

b1d795527b708ab177fcaff3efcd449e.png

上面有红色箭头的地方就是我们主要修改的地方

首先将第一个指向的地址换成我们想要爬取的地址,即阿里文学的官网首页《 https://www.aliwx.com.cn/》

第二个地方就是我们设置爬取内容的定制项

import scrapy
class AliwxSpider(scrapy.Spider):
name = 'aliwx'
allowed_domains = ['aliwx.com.cn']
start_urls = ['https://www.aliwx.com.cn/']
def parse(self, response):
#选择所有a标签下的内容
selectors = response.xpath("//ul[@class='list']/li[@class='tr']/a")
# 循环遍历每一个a标签,使书名和最新章节可以一对一匹配
for selector in selectors:
#提取a标签下的书名 . 表示在当前标签下继续选择
book_name = selector.xpath("./span[2]/text()").get()
#提取a标签下的最新章节名
book_new = selector.xpath("./span[3]/text()").get()
#打印书名和章节名
print(book_name,book_new)

4.设置settings

打开settings文件,在文件中找到代码

dd484ec09de6d5e694b753aa2308a8ea.png

这一行的意思是询问是否遵循 爬虫协议 ,大致来讲就是协议规范了我们只能提取网站允许我们提取的内容,所以此处应该将True提换成False,否则我们很有可能提取不到想要的内容

5.运行scrapy框架

打开终端,将目录切换至项目文件夹下,输入命令行来运行项目

scrapy crawl [爬虫名]

f00dcfc8bbbd76bfa043cd089bba2960.png

等待项目运行完毕,即可看到爬取到的内容:

c2ad21617fbccbcb1a631880909b9b7d.png

6.将爬取下来的内容保存到文件

如果想要将内容保存到文件中,就需要设置一个返回值来储存

将print(book_name,book_new)语句替换

items = {
'name': book_name,
'new': book_new,
}
yield items

再打开终端,输入运行并保存命令:

scrapy crawl aliwx -o book.csv

等待程序运行完成,就可以看到出现了一个book.csv文件在项目目录下,打开就是我们所保存的内容

545456a58475453795ec6f7241f2f2b1.png

到此为止一个最基本的爬虫项目就制作完成了,如果有哪里写的不好请大佬多多批评指正!

源码获取加群:850591259

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

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

相关文章

怎么用计算机计算年月份,如何使用Excel计算两个日期之间的月数?

一、这可以通过DATEDIF函数完成。二、 DATEDIF函数的定义DATEDIF函数是Excel中的隐藏函数,而不是帮助和插入公式中的隐藏函数。返回两个日期之间的年\月\日间隔的数量。 DATEDIF函数通常用于计算两个日期之间的时差。语法DATEDIF(开始日期,结束日期&…

卖金鱼的地方_1个水族店,5个周转箱,卖鲫鱼和泥鳅,老板对水族的热爱

大家好,欢迎来到一二水族。从北京回到邯郸老家,才让我有了大开眼界的感觉,为什么这么说呢?以前经常去大型观赏鱼市场,见到的都是高级海缸,大型草缸,或者雨林缸,一直陶醉在这样的氛围…

为什么计算机关机慢,电脑关机慢是什么原因 电脑关机慢的原因【图文】

使用过电脑的朋友都知道,在初期电脑关机是相当的快的,可是使用越久就会发现,电脑的关机速度减慢了许多,平时只需要30秒那样就可以关机了,到了最后居然要一分多钟关个电脑,为什么关机的时间变慢了呢?为什么…

mirna富集分析_经验之谈丨生信分析文章套路原来这么简单!

近两年,不做实验或者仅需要少量实验的生物信息学分析文章,发表量越来越多。如果利用数据库检索,高效的发出一篇文章。是科研工作者关注的话题,今天我们就用一篇生信分析的文章作为切入点,来谈谈生信分析文章的套路。1.…

a jquery 标签点击不跳转_form标签的action属性怎么用?form标签action属性的用法介绍(附实例)...

本篇文章主要的介绍了关于HTML中form标签action属性的用法介绍和实例,还有关于form标签的action属性的定义和语法介绍,最后徐还有关于form标签的action属性的作用解释。现在让我们一起来看吧。我们先来介绍HTML中form标签的action属性的含义:…

后发送过慢的问题_点胶阀使用常见问题怎么解决

点胶阀是在点胶作业中必不可少的配件之一,在点胶过程中点胶阀遇到问题该怎么解决呢,今天阿莱思斯给大家进行分析。1.点胶阀无法停胶问题:a.点胶阀中转杆或密封装置磨损。b.点胶阀的供给气压无法打开2.点胶阀针头滴胶,主要是以下几…

dns备用服务器信息,dns服务器地址(dns首选和备用填多少)

dns服务器地址DNS是计算机域名体系(DomainNameSystem或DomainNameService)的缩写,它是由解析器以及域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功用的服务器。其中域名有必要对应一个IP地址&am…

接口传值后不起作用_前端工程师吐后端工程师(第八讲)——接口的开发

上一讲我们介绍了如何写让模板变量在页面上展示,本讲我们介绍一下后端开发工作中最常用的功能——接口。创建一个go_test4文件夹,然后把go_test3中的代码复制进去。然后打开main.go文件,进行更改。说到接口就必不可少的涉及到传值和接口返回&…

css选择器按功能分,CSS 选择器

概览在 CSS 中,选择器用于选择需要添加样式的元素。CSS 选择器非常丰富,现将 CSS 1 - 3 目前所有的选择器列举如下。选择器例子例子描述CSS版本.class.intro选择 class"intro" 的所有元素。1#id#firstname选择 id"firstname" 的元素…

tensor数据类型转换_PyTorch的tensor数据类型及其相关转换

1 基本类型PyTorch的数据类型为各式各样的tensor,tensor可以理解为高维矩阵,与Numpy中的array类似。PyTorch中的tensor包括CPU上的数据类型和GPU上的数据类型。Torch定义了七种CPU tensor类型和八种GPU tensor类型。通过使用type函数可以查看变量类型&am…

cli3解决 ie11语法错误 vue_【VUE3.0】它来了,2020年09月18日,Vue.js 3.0 正式发布,但是........

您曾见过凌晨的苹果发布会,那前端界的发布会你见过吗?在Vue3正式发布前,Vue的作者尤雨溪发表主题演讲。注意!注意!注意!发布会中表示不建议大家立刻升级到Vue3.0版本,之前项目中某些依赖项可能还…

centos修改磁盘uuid_为什么MySQL用uuid做主键会被骂?

“ 在 MySQL 中设计表的时候,MySQL 官方推荐不要使用 uuid 或者不连续不重复的雪花 id(long 形且唯一,单机递增),而是推荐连续自增的主键 id,官方的推荐是 auto_increment。那么为什么不建议采用 uuid,使用 uuid 究竟有…

从客户端登陆服务器的配置文件,BLE模式和配置文件

BLE模式和配置文件(原文)本文档探讨了BLE如何工作,特别是如何将两种BLE模式(连接和广告)用于不同的目的。外围设备和中央设备vs服务器和客户端当我们通过BLE连接设备时,我们将它们视为外设(从设备)设备或中央(主设备)设备。 蓝牙标准建立了该区分方式以匹…

和preload_通过LD_PRELOAD绕过disable_functions

0x00 前言前段时间碰到拿到shell以后限制了basedir并且无法执行命令的情况,解决办法是上传恶意的.so文件,并通过设置LD_PRELOAD,然后调用新进程来加载恶意.so文件,达到绕过的效果。当时做这道题目的时候是跟着别人的题解直接套的(…

群晖服务器性能测试,对群晖DS716+进行性能测试_群晖 DS716+_企业存储技术与评测-中关村在线...

Iometer是一个工作在单系统和集群系统上用来衡量和描述I/O子系统的工具。可以被配置为模拟任何程序或者基准测试程序的磁盘和网络I/O的负载,或者用来产生整个综合的I/O负载。它也可以用来产生并测量单系统或者多系统(网络)的负载。在性能测试环节,我们采…

传播路由_什么路由器穿墙效果好?购买防骗知识

买无线路由器,首要辨识什么路由器穿墙效果好。面对市面上五花八门的路由器,很多小白在看到纷繁的参数就凌乱了,上了无良商家的当。小编觉得授人以鱼不如授人以渔,所以给大家写了一篇辨别什么路由器穿墙效果好的防入坑购买指南。我…

小程序消息服务器webapi,小程序订阅消息

# 小程序订阅消息# 功能介绍消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验。 订阅消息推送位置:服务通知订阅消息下发条件:用户自主订阅订阅消息卡片跳转能力:点击…

php生成pdf中文断码_Rmarkdown导出中文PDF解决方案

Rmarkdown非常适合R语言使用者导出格式漂亮的文档,但是输出中文PDF的过程中会遇到各种麻烦的问题,本文整理了我的经验供大家参考。总的来说,通过Rmarkdown输出中文版pdf报告,要解决以下两个核心问题:导出PDF需要配置Te…

分数的大小比较优秀教案_人教版小学数学五年级下册异分母分数加、减法公开课优质课课件教案视频...

教学案例-《异分母分数加减法》教学目标:1.借助直观图形,在操作、观察、比较、的活动中理解异分母分数加减法的算理,掌握计算方法,并能正确进行计算。2.渗透转化、迁移的数学思想,积累研究分数问题的数学活动经验。3.能…

分号可以用来分段么_更高效的GMX分段模拟方法:修改tpr文件

■2020-11-01 22:42:18在以前的一篇文章中, 我简单说过基于GROMACS的分段模拟方法[1]. 这种方法非常通用, 几乎能完成任意的功能, 且无须修改源代码, 但是运行效率比较差, 因为每次运行mdrun都要重新生成tpr文件. 对大分子来说, 使用grompp生成tpr还是很耗时的, 可能会成为运行…