在windows下安装Scrapy,并简单抓取网页

来源:互联网 发布:直播行业现状知乎 编辑:程序博客网 时间:2024/05/21 10:57

Scrapy简介,以下摘自百度百科,

Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结
Scrapy Pthyon爬虫框架 logo

Scrapy Pthyon爬虫框架 logo[1]

构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

1.首先,需要在windows下安装python 2.7版本,然后配置好环境变量,如下所示,这里将Scripts的路径也放到环境变量中,这样可以直接在命令行中用我们在第二步中安装的pip了;

2.安装pip,可以在https://bootstrap.pypa.io/get-pip.py这个链接上下载get-pip.py文件,然后执行python get-pip.py,这样脚本就会自动下载setuptools工具;

(pip是python的一个软件包管理工具)

3.使用命令pip install Scrapy来安装Scrapy,注意,这里可能会遇到解码错误,需要改Python27文件夹下Lib的mimetypes.py文件,大概在256行,把默认的编码方式改成gbk,代码如下,要注意python代码的缩进问题。

#default_encoding = sys.getdefaultencoding()        if sys.getdefaultencoding() != "gbk":            reload(sys)            sys.setdefaultencoding("gbk")        default_encoding = sys.getdefaultencoding()

通过以上三步Scrapy框架就搭建好了。


接下来,根据Scrapy官网上的tutorial来做一个简单的爬虫。

1.首先,进入工作目录,打开命令行,输入以下命令,来创建一个Scrapy项目;

scrapy startproject tutorial
创建时,我的电脑上命令行报错,ImportError: No module named twisted,等等,缺少了许多包,于是去安装,用pip install **即可。

注意,w3lib.http module需要安装w3lib,在安装lxml时出现如下图所示的错误,可在https://pypi.python.org/pypi/lxml/2.3/这个网站上下载lxml的exe文件直接安装。


安装完成后,如下图所示,可看到目录中生成了几个文件。


2.编写item.py文件,如下图所示:

import scrapyclass TutorialItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()title = scrapy.Field()link = scrapy.Field()desc = scrapy.Field()
3.编写spider文件夹下的dmoz_spider.py文件;

import scrapyclass DmozSpider(scrapy.Spider):name = "dmoz"allowed_urls = ["dmoz.org"]start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",        <span style="white-space:pre"></span>"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):filename = response.url.split("/")[-2]with open(filename, 'wb') as f:f.write(response.body)
4.在tutorial目录下,执行如下的命令,即可执行简单的爬取,爬取完后,即可发现在tutorial目录下,出现了Books和Resources文件。

scrapy crawl dmoz
有可能会遇到缺少win32api包的情况,去sourceforge上下载安装pywin32即可。

通过上述四个步骤,可以抓取Books和Resources文件上的所有文件信息。


可通过response的xpath()方法来提取网页HTML上的指定对象。

1.这里在items.py文件中定义好Item对象DmozItem,代码如下所示;

import scrapyclass DmozItem(scrapy.Item):    # define the fields for your item here like:    # name = scrapy.Field()title = scrapy.Field()link = scrapy.Field()desc = scrapy.Field()

2.在dmoz_spider.py文件中,将代码修改如下,这里需要导入DmozItem类。这里通过response.xpath('//ul/li')提取出HTML页面中所有<ul>下的<li>标签,然后迭代它们,提取出链接等信息,再将它们放入item对象中。

import scrapyfrom tutorial.items import DmozItemclass DmozSpider(scrapy.Spider):name = "dmoz"allowed_urls = ["dmoz.org"]start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",        <span style="white-space:pre"></span>"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):for sel in response.xpath('//ul/li'):item = DmozItem()item['title'] = sel.xpath('a/text()').extract()item['link'] = sel.xpath('a/@href').extract()item['desc'] = sel.xpath('text()').extract()yield item
3.在tutorial的目录下,执行如下命令,程序执行完后,每个item对象将输出到items.json文件中,

scrapy crawl dmoz -o items.json
文件如下图所示。

以上就是在Windows下安装和使用Scrapy的方法。

0 0