网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面。[b]Scrapy[/b]是纯[b]Python[/b]实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便~
[b] Scrapy[/b] 使用[b]wisted[/b]这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。整体架构如下图所示:
[img]http://files.jb51.net/file_images/article/201508/201508071022341.jpg[/img]
绿线是数据流向,首先从初始URL 开始,[b]Scheduler [/b]会将其交给 Downloader 进行下载,下载之后会交给 Spider 进行分析,Spider分析出来的结果有两种:一种是需要进一步抓取的链接,例如之前分析的“下一页”的链接,这些东西会被传回 Scheduler ;另一种是需要保存的数据,它们则被送到Item Pipeline 那里,那是对数据进行后期处理(详细分析、过滤、存储等)的地方。另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。
我假定你已经安装了Scrapy。假如你没有安装,你可以参考这篇文章。
在本文中,我们将学会[b]如何使用Scrapy建立一个爬虫程序,并爬取指定网站上的内容[/b]
1. 创建一个新的Scrapy Project
2. 定义你需要从网页中提取的元素Item
3.实现一个Spider类,通过接口完成爬取URL和提取Item的功能
4. 实现一个Item PipeLine类,完成Item的存储功能
我将会用腾讯招聘官网作为例子。
Github源码:[url=https://github.com/maxliaops/scrapy-itzhaopin]https://github.com/maxliaops/scrapy-itzhaopin[/url]
[img]http://files.jb51.net/file_images/article/201508/201508071022342.png[/img]
[b]目标:抓取腾讯招聘官网职位招聘信息并保存为JSON格式。[/b]
新建工程
[b]首先,为我们的爬虫新建一个工程,首先进入一个目录(任意一个我们用来保存代码的目录),执行:[/b]
[url=http://hr.tencent.com/position_detail.php?id=15626&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15626&keywords=&tid=0&lid=0[/url]", "publishTime":
["2014-04-25"], "catalog": ["产品/项目类"], "workLocation": ["深圳"]}
{"recruitNumber": ["1"], "name": ["TEG13-后台开发工程师(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=15666&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15666&keywords=&tid=0&lid=0[/url]",
"publishTime": ["2014-04-25"], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["2"], "name": ["TEG12-数据中心高级经理(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=15698&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15698&keywords=&tid=0&lid=0[/url]",
"publishTime": ["2014-04-25"], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["1"], "name": ["GY1-微信支付品牌策划经理(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=15710&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15710&keywords=&tid=0&lid=0[/url]",
"publishTime": ["2014-04-25"], "catalog": ["市场类"], "workLocation": ["深圳"]}
{"recruitNumber": ["2"], "name": ["SNG06-后台开发工程师(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=15499&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15499&keywords=&tid=0&lid=0[/url]",
"publishTime": ["2014-04-25"], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["2"], "name": ["OMG01-腾讯时尚视频策划编辑(北京)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=15694&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15694&keywords=&tid=0&lid=0[/url]",
"publishTime": ["2014-04-25"], "catalog": ["内容编辑类"], "workLocation": ["北京"]}
{"recruitNumber": ["1"], "name": ["HY08-QT客户端Windows开发工程师(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=11378&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=11378&keywords=&tid=0&lid=0[/url]",
"publishTime": ["2014-04-25"], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["5"], "name": ["HY1-移动游戏测试经理(上海)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=15607&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15607&keywords=&tid=0&lid=0[/url]", "publishTime": ["2014-04-25"], "catalog": ["技术类"], "workLocation": ["上海"]}
{"recruitNumber": ["1"], "name": ["HY6-网吧平台高级产品经理(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=10974&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=10974&keywords=&tid=0&lid=0[/url]", "publishTime": ["2014-04-25"], "catalog": ["产品/项目类"], "workLocation": ["深圳"]}
{"recruitNumber": ["4"], "name": ["TEG14-云存储研发工程师(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=15168&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=15168&keywords=&tid=0&lid=0[/url]", "publishTime": ["2014-04-24"], "catalog": ["技术类"], "workLocation": ["深圳"]}
{"recruitNumber": ["1"], "name": ["CB-薪酬经理(深圳)"], "detailLink": "[url=http://hr.tencent.com/position_detail.php?id=2309&keywords=&tid=0&lid=0]http://hr.tencent.com/position_detail.php?id=2309&keywords=&tid=0&lid=0[/url]", "publishTime": ["2013-11-28"], "catalog": ["职能类"], "workLocation": ["深圳"]}
以上全部内容就是通过Python爬虫框架Scrapy实战之批量抓取招聘信息的全部内容,希望对大家有所帮助,欲了解更多编程知识,请锁定我们的网站,每天都有新的内容发布。