使用Scrapy 命令行工具创建项目及蜘蛛
所谓事出有因,这一系列的文章就是介绍如何使用scrapy讲国家统计局的城乡区划数据给扒拉下来的
所以我们在前一节安装测试scrapy的时候,使用的样例链接便是我们需要其数据的页面
好了,废话完毕,咱们进入正题,首先创建抓取项目
[root@localhost ~]# mkdir -p /data/jeen [root@localhost ~]# chown -R jeen:jeen /data/jeen/ [root@localhost ~]# su jeen [jeen@localhost root]$ cd /data/jeen/ [jeen@localhost jeen]$ mkdir pyscrapy [jeen@localhost jeen]$ cd pyscrapy/ [jeen@localhost pyscrapy]$ scrapy startproject govstats New Scrapy project 'govstats', using template directory '/usr/local/python/2.7.12/lib/python2.7/site-packages/scrapy/templates/project', created in: /data/jeen/pyscrapy/govstats You can start your first spider with: cd govstats scrapy genspider example example.com [241267 refs] #按照提示咱们创建一个自己的蜘蛛 [jeen@localhost pyscrapy]$ cd govstats/ [jeen@localhost govstats]$ scrapy genspider jarea www.stats.gov.cn Created spider 'jarea' using template 'basic' in module: govstats.spiders.jarea [241272 refs] #到这边 就有一个默认的抓取方法了,你可以留意过程中相关目录的文件变化咱们去做一些小调整,让它抓取分析一些我们需要的数据
好了 咱们回到主题,修改自动生成的 抓取文件
[jeen@localhost govstats]$ vi govstats/spiders/jarea.py #修改 start_urls 内容如下 start_urls = ( 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2014/index.html', ) #在parse 方法中添加如下代码 print "==Province==URL" + response.url tds = response.css(".provincetr").xpath('./td') for td in tds: code = td.xpath("./a/@href").extract()[0] code = code.replace('.html','') name = td.xpath(".//text()").extract()[0] name = name.strip() print code," ",name #完成后保存退出接下来尝试抓取 看看效果 :)
[jeen@localhost govstats]$ scrapy crawl jarea --nolog ==Province==URLhttp://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2014/index.html 11 北京市 12 天津市 13 河北省 14 山西省 15 内蒙古自治区 21 辽宁省 22 吉林省 23 黑龙江省 31 上海市 32 江苏省 33 浙江省 34 安徽省 35 福建省 36 江西省 37 山东省 41 河南省 42 湖北省 43 湖南省 44 广东省 45 广西壮族自治区 46 海南省 50 重庆市 51 四川省 52 贵州省 53 云南省 54 西藏自治区 61 陕西省 62 甘肃省 63 青海省 64 宁夏回族自治区 65 新疆维吾尔自治区 [303391 refs] #可以看到,希望得到的数据已经分析出来了好的,到这边可以看到抓取已经初见成效
但是,光这样打印出来没鸟用啊,我们要的是让这些数据能发挥作用啊
不急,走到这一步之后,有很多课余的东西需要补充
你可能需要先了解下python的语法结构
scrapy提供的工具类,已经具体的运作流程
如何分析获取页面中的有用信息
xpath css 选择器的规则怎么写
网页如果不是utf-8编码怎么办 ... 等等等等
但这些都不是短短的一篇文章能讲清楚的,有疑问的童鞋,还需自行充充电
后续咱们再做深入操作 :)