Python开发 之 10分钟教你学会爬虫Scrapy
文章目录
- 一、简介
- 二、Scrapy的简单示例
- 1、先找一个需要爬的网页
- 2、先给用的浏览器下载一个“XPath”查询插件
- 2.1 谷歌浏览器方法
- 2.2 360浏览器的方法(博主用此浏览器,因为可以切换内核)
- 3、利用Xpath找到要爬的位置
- 3.1 先利用浏览器找到html对应的元素
- 3.2 应用Xpath工具找到对应数据
- 3.2.1 先找到要爬的区域,有唯一标识的标签
- 3.2.2 利用Xpath工具输入规则获取数据
- 4、数据继续处理 Scrapy 爬虫框架
- 4.1 以PyCharm的开发环境为例,先安装环境的包
- 4.2 创建Scrapy项目
- 4.3 制定规则,后续处理
- 4.4 效果图
- 三、爬虫与反爬虫的较量
- 1、通过”USER_AGENT“判断模拟用户是否为浏览器的反爬虫技术
- 1.1 “HTTP status code is not handled or not allowed”错误
- 1.2 “HTTP status code is not handled or not allowed”的解决方案
- 2、应对传统的反爬机制
- 2.1 通过单个IP阈值予以封锁的反爬虫技术
- 2.2 通过单个session访问超过阈值,予以封锁。
- 2.3 后台对访问进行统计,如果单个userAgent访问超过阈值,予以封锁。
- 2.4 robots协议
- 2.5 道德与利益
一、简介
Scrapy是一个非常简单方便的爬虫框架了,本篇文章一步一步的教你几分钟学会爬虫。
简单了解一下Scrapy的概念。它是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
本文是讲述的全过程,会比较详细。对于一些有些计算机知识底蕴的人来说直接从4.2开始看Scrapy框架。
本文讲的是Xpath在Scrapy中的应用,其它爬虫方式可参考:
Python开发 之 两种爬虫的方式 正则表达式、XPath
二、Scrapy的简单示例
1、先找一个需要爬的网页
比如我现在想爬一下,姓氏的名字都有哪些
网页地址:http://xh.5156edu.com/page/z2491m7594j19615.html
2、先给用的浏览器下载一个“XPath”查询插件
2.1 谷歌浏览器方法
https://jingyan.baidu.com/article/c910274bb21a57cd361d2d01.html
2.2 360浏览器的方法(博主用此浏览器,因为可以切换内核)
在插件栏→管理→扩展→搜索Xpath→下载Xpath工具
如下图:
3、利用Xpath找到要爬的位置
博主就以360浏览器为例来讲了,其它浏览器也是一个原理
3.1 先利用浏览器找到html对应的元素
按F12进入开发人员工具,然后依次如图点击,找到需要爬的区域,在Elements中找到
3.2 应用Xpath工具找到对应数据
3.2.1 先找到要爬的区域,有唯一标识的标签
在Elements中找到table标签是有id的,如图:
3.2.2 利用Xpath工具输入规则获取数据
规则其实蛮简单的,以下是我总结的一个简单公式:
“//”+唯一标识的标签+[+@+id/class=“要爬的名”+]+/+下一层+/+再下一层+…+最后一层+/+text()
text()代表文本
更多规则可以参考:w3school的语法规则http://www.w3school.com.cn/xpath/xpath_syntax.asp
以此推测出这个网页要爬的规则就是://table[@id=“table5”]/tbody/tr/td/a/text()
4、数据继续处理 Scrapy 爬虫框架
如果后续不需要处理,那就简单了,直接把需要的结果“Ctrl+A”全选后,保存成需要的格式就OK啦!
一般情况,要抓取网页的都不止一个规则的数据,一般都是多个规则。
比如:跟着一个虫爬到的数据,继续爬,爬出各个子网页上的数据。然后再继续爬,……
4.1 以PyCharm的开发环境为例,先安装环境的包
先建立一个项目,Demo_crawler,然后找到Terminal模块,输入命令下载
# 安装scrapy框架
pip install scrapy
# 安装python与windows交互模块
pip install pypiwin32
装好后,如图:
4.2 创建Scrapy项目
创建一个项目
# main_crawler为爬虫项目名称
scrapy startproject main_crawler
编写spider文件的名字和它要爬的网页名
# demo_crawler为爬虫名,http://xh.5156edu.com/page/z2491m7594j19615.html为爬虫想要爬的网页
scrapy genspider demo_crawler "http://xh.5156edu.com/page/z2491m7594j19615.html"
这样就创建了demo_crawler在spiders文件夹下
4.3 制定规则,后续处理
写个简单的处理,就是在爬一次的时候,就保存成name.txt文件
开始爬
# demo_crawler为爬虫名称
scrapy crawl demo_crawler
4.4 效果图
三、爬虫与反爬虫的较量
爬虫抓取技术领域还有一个“白道”的手段,叫做robots协议。你可以在一个网站的根目录下访问/robots.txt,比如让我们一起来看看github的机器人协议,Allow和Disallow声明了对各个UA爬虫的抓取授权。
不过,这只是一个君子协议,虽具有法律效益,但只能够限制那些商业搜索引擎的蜘蛛程序,你无法对那些“野爬爱好者”加以限制的。
1、通过”USER_AGENT“判断模拟用户是否为浏览器的反爬虫技术
1.1 “HTTP status code is not handled or not allowed”错误
简单的反爬机制,就是通过”USER_AGENT“判断模拟用户是否为浏览器
错误码:“ HTTP status code is not handled or not allowed”
1.2 “HTTP status code is not handled or not allowed”的解决方案
在Scrapy的setting.py中,添加浏览器代理即可
比如说:“USER_AGENT = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36’”
2、应对传统的反爬机制
2.1 通过单个IP阈值予以封锁的反爬虫技术
- 反爬军
这个虽然效果还不错,但是其实有两个缺陷,一个是非常容易误伤普通用户,另一个就是,IP其实不值钱,几十块钱甚至有可能买到几十万个IP。所以总体来说是比较亏的。不过针对普通爬虫,这点还是非常有用的。 - 爬虫军
解决方案其实也很简单,通过不同的Ip代理就可以解决。有免费的IP代理网站,也有收费的。
2.2 通过单个session访问超过阈值,予以封锁。
- 反爬军
这个看起来高级了一些,但是其实效果更差。 - 爬虫军
因为session完全不值钱,重新申请一个就可以了。一旦检测到有反爬机制,直接重申即可。
2.3 后台对访问进行统计,如果单个userAgent访问超过阈值,予以封锁。
- 反爬军
这个虽然效果也还行,类似于抗生素之类的,效果出奇的好,但是杀伤力过大,误伤非常严重,使用的时候要非常小心。 - 爬虫军
虽然效果不咋滴,不过,也好破解,通过随机的User_Agent代理不同的浏览器头衔即可
2.4 robots协议
- 反爬军
Robots协议告诉了搜索引擎和爬虫哪些页面可以抓取,哪些不可以抓取。这个协议通常是存放在robots.txt文件里面,位于网站的根目录下 - 爬虫军
不过,这只是一个君子协议,虽具有法律效益,但只能够限制那些商业搜索引擎的蜘蛛程序,你无法对那些“野爬爱好者”加以限制的。
在Scrapy框架中,默认的是遵循,你也可以改成False,不遵循
2.5 道德与利益
有一个说法是,互联网上50%的流量都是爬虫创造的。这个说法虽然夸张了点,但也体现出了爬虫的无处不在。爬虫之所以无处不在,是因为爬虫可以为互联网企业带来收益。
如今,我们制造爬虫和反爬虫的初衷都发生了变化。从一开始的获取信息和保护隐私,变成了如今的获取商业利益和反制对手。法律很难阻止爬虫技术的行为,除非在竞品之间涉及到对用户原创内容的批量搬运,而且整个诉讼过程非常漫长,企业很难表述自己哪里受了损失。
道德还是利益,看你要怎么选择了。
Python开发 之 10分钟教你学会爬虫Scrapy相关推荐
- 10分钟学计算机,电脑运行越来越慢?程序员大牛10分钟教你学会电脑瘦身
原标题:电脑运行越来越慢?程序员大牛10分钟教你学会电脑瘦身 你的电脑是不是越来越慢?这里让程序员大佬用10分钟时间教你学会给电脑软件瘦身,1分钟了解计算机硬件升级.分分钟让你成为别人眼中的计算机大牛 ...
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- 10分钟 教你学会Linux/Unix下的vi文本编辑器
首先,记住vi编辑器的两个模式:1.命令模式 2.编辑模式. 在一个UNIX/Linux的shell命令或者一个以斜杠(/).问号(?)或冒号(:)开始的vi命令后面用户需要键入回车键,而要切换到v ...
- woff字体反爬实战,10分钟就能学会(ttf字体同理)
声明:本帖子仅是用于学习用途,请勿与用于恶意破坏别人网站,本人不承担法律责任. 来继续学爬虫呀! 很开心,竟然上榜某爬虫练习网站了!!! 来看一下榜单 超激动的!!但是还有两道目前个人解决不了,希望哪 ...
- 一分钟教你学会python_十分钟教你学会python编写小游戏
原标题:十分钟教你学会python编写小游戏 看过,估计大家都已经精通了吧,好的,话不多说,今天就活学活用,用python来编写纸牌游戏21点,江湖人称黑杰克,BLACK JACK-(注意法式卷舌). ...
- python编写小游戏17_十分钟教你学会python编写小游戏
原标题:十分钟教你学会python编写小游戏 看过,估计大家都已经精通了吧,好的,话不多说,今天就活学活用,用python来编写纸牌游戏21点,江湖人称黑杰克,BLACK JACK-(注意法式卷舌). ...
- 如何用计算机自动回复微信,10分钟教你用Python实现微信自动回复功能
01 前言&&效果展示 相信大家都有忙碌的时候,不可能一直守在微信上及时回复消息.但微信又不能像QQ一样设置自动回复.无妨,今天,我们就来用Python实现微信的自动回复功能吧,并且把 ...
- 10分钟教你用python打造贪吃蛇超详细教程
更多精彩尽在微信公众号[程序猿声] 10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来 ...
- 10分钟教你用python如何正确把妹
前言 今天没妹子约,刚好研究一下.如何用神奇的python打造一个把妹神器吧.看完这个,你们就能走向人生巅峰,迎娶白富美啦. 我知道你们想看看效果 当然啦,这只是测试版的效果,真正的版本可比这个厉害多 ...
最新文章
- python数据驱动读取用例_Python Selenium 之数据驱动测试
- linux adc测试程序,基于Qt4.7的ADC测试程序
- linux java 环境配置_linux下java开发环境配置
- NGINX基于Tomcat配置负载均衡
- SQL查询提速秘诀,避免锁死数据库的数据库代码
- arcgis 属性表中起点终点创建线_一种GIS单线路网自动生成双线路网的方法与流程...
- 关于已移除sd卡,手机不认卡的原因和解决办法(转)
- linux flash插件安装方法,Linux系统下安装Flash浏览器插件的方法
- Excel表格导入数据库进行判断是否有相同的数据
- tagcanvas.min.js 文字云
- 开始使用Elasticsearch (2): 了解如何进行搜索
- Lumaqq移植到Android 之进阶篇
- 使用Python绘制相关性图
- OpenLayers基础:多方底图
- 英飞凌TRAVEO II介绍
- 电脑外接屏幕时“WindowsServer异常退出”
- archlinux 安装搜狗输入法
- 戴尔g3最新版的声卡,有可能导致插上耳机没有声音
- “互联网+”六年,云徙科技打造数字化经营增长“头牌”
- DW_apb_i2c 使用介绍2--i2c初始化以及读写eeprom测试