假设想抓数据,就须要有爬虫程序,业内叫crawler或者spider。

有各种语言版本号的开源爬虫。c++, Java,  php,在github上搜一下,以"spider c++"为keyword,有245个开源爬虫,以"spider java"为keyword。有48个。

那python呢?156个。





爬虫技术在业界已经非常成熟了。有非常多开源框架,在它们的帮助下写爬虫能够非常快,几个小时就能写一个不错的东东用。

爬虫技术也会非常复杂。假设要做分布式抓取和全文检索,一般使用Nutch。





最有名的Python爬虫框架是Scrapy,这个名字也蛮有意思的,预计是Spider。Crawler,python各取部分字符组合起来的。它的官方主页在http://scrapy.org/。

1. 安装Scrapy

安装Scrapy非常easy,linux系统的话,一条语句就能够了。"sudo pip install Scrapy"。

通常python在Linux各发行版上都是默认安装的。pip是python的包管理工具,运行install命令后。它会从网上下载最新版本号的Scrapy安装。安装完成。在命令行输入命令"scrapy version"。会打印scrapy的版本号。表明成功安装。

2. 生成项目文件夹

假设要抓取大众点评网,须要先创建项目。选择一个空文件夹,比方在我的电脑上是/tmp/scrapy-test。在命令行输入"scrapy startproject crawdp",startproject是scrapy的一个命令。执行后,在/tmp/scrapy-test文件夹会出现一个新文件夹crawdp。它包括scrawdp项目所须要的一切东东,如源码和配置文件。

执行"tree crawdp",能够看到整个文件夹结构。

那么,"startproject""创建项目"这个高大上字眼背后的真相是什么呢?事实上不复杂,就是创建一个项目名的文件夹和它的几个子文件夹,然后复制几个指定的文件到这些文件夹,再把这些文件中的几个特定字符串替换成项目名。这块的代码在scrapy源码的scrapy/command/commands文件夹下的startproject.py文件中。而在"tree crawdp"看到的文件。它们的原型在scrapy/templates/project/module文件夹下,如settings.py.tmpl文件,把它里面的字符串"$project_name"用"crawdp"替换,再把文件名称改成settings.py,就是crawdp的settings.py文件。





像settings.py.tmpl这种文件。又称为模板文件。把模板里的变量用字符串替换掉。叫渲染(render)。在web server的开发中也相同使用这种技术,前端工程师设计html文件,里面包括形如"$project_name"之类的变量,保存成模板文件,而服务器在执行的时候,用执行时产生的字符串替换掉模板里的变量,再把替换后的内容发给浏览器,就是我们看到的网页,所以叫动态页面。





3. 第一个spider

開始写第一个spider,这是一个很easy的spider,仅仅有13行代码。

在/tmp/scrapy-test/crawdp/crawdp/spiders文件夹下,创建文件cityid_spider.py。内容例如以下:

-----------------------------------------

from scrapy.spider import BaseSpider

from scrapy.selector import HtmlXPathSelector





class CityidSpider(BaseSpider):

    name = "cityid_spider"

    start_urls = ["http://www.dianping.com/shanghai/food"]





    def parse(self, response):

        hxs = HtmlXPathSelector(response)

        xs = hxs.select('//ul[@class=\"nc_list\"]/li/a/@href')

        x = xs[0]

        cityid = x.extract().split('/')[3]

        print "\n\n\ncityid = %s\n\n\n" % cityid

-----------------------------------------

返回到/tmp/scrapy-test/crawdp/文件夹,在这个文件夹下运行"scrapy crawl cityid_spider",能够看到打印出来的结果是"cityid = 1",在默认配置下,顺带会打印非常多log信息,所以我在这句加了几个换行符。让它显示得清楚一点。





注意,这里有几个关键点:

a. cityid_spider.py这个文件,必须放在/tmp/scrapy-test/crawdp/crawdp/spiders文件夹下,放在别的地方,scrapy找不到。

b. 源码里。name = "cityid_spider"这句必须有。这里指定了spider的名字,scrapy靠名字识别不同的spider。

c. 必须在/tmp/scrapy-test/crawdp/下运行"scrapy crawl cityid_spider",在别的文件夹下不行。

其它的,能够把class CityidSpider类名换成别的,没关系,也能够cityid_spider.py文件名称换成别的名字,也没关系。不影响效果。

这个spider是一切spider的基本型,更复杂的spider都是在它的基础上逐渐加入很多其它功能做出来的。





4. 这个spider是干什么的

在大众点评网,每一个城市都有一个数字代号,比方上海是1,北京是2。深圳是7。它家的总部在上海。所以上海是1号。假设想抓很多其它城市的餐厅,就须要知道城市代号。

上海的城市代号,能够从http://www.dianping.com/shanghai/food抓取。在浏览器打开http://www.dianping.com/shanghai/food,在左側的“商区”以下,有“陆家嘴”,在它上面点击右键。选择“审查元素”,假设你用的是chrome,浏览器会开一个窗体,用高亮色定位到陆家嘴相应的html元素。这个元素包括一个超级链接。叫"/search/category/1/10/r801"
。那么上海的cityid就是超级链接里的category后面"1",而这个链接。是嵌套在一个固定的层次式的html元素里。也就是形如代码里形如"//ul[@class=\"nc_list\"]/li/a/@href"的结构。这样的写法叫xpath。

执行"scrapy crawl cityid_spider"的时候,spider開始执行,它先检查spider源码里的“start_urls = ["http://www.dianping.com/shanghai/food"]”,依据这个url,从大众点评网上抓取html文件内容。存在response里,然后调用parse函数,从response里用xpath解析出全部符合"//ul[@class=\"nc_list\"]/li/a/@href"的html元素,取第一个。得到一个类似“/search/category/1/10/r801”的字符串,然后将它以'/'为间隔做切割,取第3个。就是"1",就是cityid,这就是parse函数的前四条语句做的事情。





这块写的略有一点不人性化。术语比較多。那么,想做抓取的话,至少要懂一点html,css,web server,xpath。稍微有点基础即可。这些东西在这里就不展开了,找本入门书看看就能够了。

一个站点的诞生02--用Scrapy抓取数据的更多相关文章

  1. 分布式爬虫:使用Scrapy抓取数据

    分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘. ...

  2. scrapy 抓取数据被禁止的解决方法

    在用抓取头条新闻的数据时出现以下问题:禁止抓取,结果数据没有出来 后来经过查询得知需要把settings.py里面 修改为ROBOTSTXT_OBEY = False就可以了, 默认True

  3. python scrapy 抓取脚本之家文章(scrapy 入门使用简介)

    老早之前就听说过python的scrapy.这是一个分布式爬虫的框架,可以让你轻松写出高性能的分布式异步爬虫.使用框架的最大好处当然就是不同重复造轮子了,因为有很多东西框架当中都有了,直接拿过来使用就 ...

  4. scrapy抓取小说

    用scrapy建立一个project,名字为Spider scrapy startproject Spider 因为之前一直用的是电脑自带的python版本,所以在安装scrapy时,有很多问题,也没 ...

  5. scrapy抓取淘宝女郎

    scrapy抓取淘宝女郎 准备工作 首先在淘宝女郎的首页这里查看,当然想要爬取更多的话,当然这里要查看翻页的url,不过这操蛋的地方就是这里的翻页是使用javascript加载的,这个就有点尴尬了,找 ...

  6. 【爬虫】利用Scrapy抓取京东商品、豆瓣电影、技术问题

    1.scrapy基本了解 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.可以应用在包括数据挖掘, 信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取(更确切来说,网络抓 ...

  7. scrapy抓取学院新闻报告

    抓取四川大学公共管理学院官网(http://ggglxy.scu.edu.cn)所有的新闻咨询. 实验流程 1.确定抓取目标.2.制定抓取规则.3.'编写/调试'抓取规则.4.获得抓取数据 1.确定抓 ...

  8. scrapy抓取拉勾网职位信息(一)——scrapy初识及lagou爬虫项目建立

    本次以scrapy抓取拉勾网职位信息作为scrapy学习的一个实战演练 python版本:3.7.1 框架:scrapy(pip直接安装可能会报错,如果是vc++环境不满足,建议直接安装一个visua ...

  9. scrapy抓取中国新闻网新闻

    目标说明 利用scrapy抓取中新网新闻,关于自然灾害滑坡的全部国内新闻:要求主题为滑坡类新闻,包含灾害造成的经济损失等相关内容,并结合textrank算法,得到每篇新闻的关键词,便于后续文本挖掘分析 ...

  10. scrapy抓取斗鱼APP主播信息

    如何进行APP抓包 首先确保手机和电脑连接的是同一个局域网(通过路由器转发的网络,校园网好像还有些问题). 1.安装抓包工具Fiddler,并进行配置 Tools>>options> ...

随机推荐

  1. jmeter 参数化学习笔记

    上次写了在接口的交互过程中,系统返回的内容,需要在接下来的交互中用到,从而把参数进行参数化的关联,这次写一下在压测过程中,如果每次发起请求参数名相同,单参数值需要替换的,我们需要进行的参数化. 在使用 ...

  2. B - Magnets

    Problem description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't ...

  3. sql学习--insert

    insert的四种插入方式 第一种最简单的 into 和目标列的列表是可选的 intsert [into] tableA [(col1,col2)] values(val1,val2) 第二种 ins ...

  4. ie8及其以下版本兼容性问题之文本省略

    1. 单行文本省略 单行文本省略适用于文本超出内容显示区,则在末尾显示省略号 1.1 普通文本超出省略 普通文本超出显示省略号,示例: .p{ height: 30px line-height: 30 ...

  5. win7 64位装sql2000

    1.运行不了安装程序 右击安装exe文件->属性->兼容性->以xp sp3兼容和管理员身份 2.安装过程中提示“被挂起”的故障 解决:打开注册表编辑器,在HKEY_LOCAL_MA ...

  6. 机器学习K-Means

    1.K-Means聚类算法属于无监督学习算法. 2.原理:先随机选择K个质心,根据样本到质心的距离将样本分配到最近的簇中,然后根据簇中的样本更新质心,再次计算距离重新分配簇,直到质心不再发生变化,迭代 ...

  7. PAT_A1135#Is It A Red-Black Tree

    Source: PAT A1135 Is It A Red-Black Tree (30 分) Description: There is a kind of balanced binary sear ...

  8. eas之编辑表单元格

    --指定表列行单元不可编辑 // 锁定表格.行.列.单元 table.getStyleAttributes().getProtection().setLocked(true); row.getStyl ...

  9. SDWC2017游记

    果然我还是那么弱啊.——$Mingqi_H.$ Day -1 下午五点半回家.然而并没有什么事情可做.依旧是下载$Magical\,Mirai$,找一个黄油存起来. emmm...本来是打算去开发区那 ...

  10. python中字节与字符串的转换

    #bytes object    byte = b"byte example"     # str object    str = "str example" ...