Scrapy是一个非常简单方便的爬虫框架了,本篇文章一步一步的教你几分钟学会爬虫。
简单了解一下Scrapy的概念。它是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
本文是讲述的全过程,会比较详细。对于一些有些计算机知识底蕴的人来说直接从4.2开始看Scrapy框架。
本文讲的是Xpath在Scrapy中的应用,其它爬虫方式可参考:
Python开发 之 两种爬虫的方式 正则表达式、XPath
比如我现在想爬一下,姓氏的名字都有哪些
网页地址:http://xh.5156edu.com/page/z2491m7594j19615.html
https://jingyan.baidu.com/article/c910274bb21a57cd361d2d01.html
在插件栏→管理→扩展→搜索Xpath→下载Xpath工具
如下图:
博主就以360浏览器为例来讲了,其它浏览器也是一个原理
按F12进入开发人员工具,然后依次如图点击,找到需要爬的区域,在Elements中找到
规则其实蛮简单的,以下是我总结的一个简单公式:
“//”+唯一标识的标签+[+@+id/class=“要爬的名”+]+/+下一层+/+再下一层+…+最后一层+/+text()
text()代表文本
更多规则可以参考:w3school的语法规则http://www.w3school.com.cn/xpath/xpath_syntax.asp
以此推测出这个网页要爬的规则就是://table[@id=“table5”]/tbody/tr/td/a/text()
如果后续不需要处理,那就简单了,直接把需要的结果“Ctrl+A”全选后,保存成需要的格式就OK啦!
一般情况,要抓取网页的都不止一个规则的数据,一般都是多个规则。
比如:跟着一个虫爬到的数据,继续爬,爬出各个子网页上的数据。然后再继续爬,……
先建立一个项目,Demo_crawler,然后找到Terminal模块,输入命令下载
# 安装scrapy框架
pip install scrapy
# 安装python与windows交互模块
pip install pypiwin32
创建一个项目
# 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文件夹下
写个简单的处理,就是在爬一次的时候,就保存成name.txt文件
开始爬
# demo_crawler为爬虫名称
scrapy crawl demo_crawler
爬虫抓取技术领域还有一个“白道”的手段,叫做robots协议。你可以在一个网站的根目录下访问/robots.txt,比如让我们一起来看看github的机器人协议,Allow和Disallow声明了对各个UA爬虫的抓取授权。
不过,这只是一个君子协议,虽具有法律效益,但只能够限制那些商业搜索引擎的蜘蛛程序,你无法对那些“野爬爱好者”加以限制的。
简单的反爬机制,就是通过”USER_AGENT“判断模拟用户是否为浏览器
错误码:“ 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’”
有一个说法是,互联网上50%的流量都是爬虫创造的。这个说法虽然夸张了点,但也体现出了爬虫的无处不在。爬虫之所以无处不在,是因为爬虫可以为互联网企业带来收益。
如今,我们制造爬虫和反爬虫的初衷都发生了变化。从一开始的获取信息和保护隐私,变成了如今的获取商业利益和反制对手。法律很难阻止爬虫技术的行为,除非在竞品之间涉及到对用户原创内容的批量搬运,而且整个诉讼过程非常漫长,企业很难表述自己哪里受了损失。
道德还是利益,看你要怎么选择了。