Python+Scrapy爬取数据简单实例

荒凉一梦 提交于 2019-12-08 21:45:34

Python爬取数据

  • Scrapy安装

Scrapy简介及win下安装

Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据 ——百度百科

scapy安装+wins

以下所有软件在win下面安装方式相似,且都要对应python版本及win的操作系统位数。有的软件依赖其他软件,所以要先安装依赖。

第一步:安装pywin32(Windows Pywin32允许你像VC一样的形式来使用PYTHON开发win32应用),从http://sourceforge.net/projects/pywin32/files/ 下载对应python版本与操作系统位数的pywin32.双击安装即可(exe安装方式)

第二步:安装twisted前,先安装它的依赖。Zope.Interface :https://pypi.python.org/pypi/zope.interface#downloads 安装方式如上。安装pyopenssl:https://pypi.python.org/simple/pyopenssl/
最后安装http://twistedmatrix.com/Releases/Twisted/14.0/
第三步:安装lxml:https://pypi.python.org/pypi/lxml/3.4.0
第四步:安装 setuptools:https://pypi.python.org/pypi/setuptools/0.6c11 .若直接双击安装不了,另附安装方法[1]有相关安装方法。
第五步:需要将python安装目录下的Scripts目录路径添加到系统变量中。
最后,安装scrapy:地址自行搜索,通过setup.py install安装。附全部软件.

链接:http://pan.baidu.com/s/1i5Q8TId 密码:a5ol

验证环境
后台运行:scrapy若没报错就说明装成功了。

Linux下安装

环境: ubuntu15.04 python2.7
第一步: pip install -U scrapy
问题: error: command ‘x86_64-linux-gnu-gcc’ failed with exit status 1

[搭建一个简单的scrapy项目][3]

基本上我们是根据自己的需求基于scrapy基本框架进行定制化爬取。

新建一个python+scrapy项目

在你想新建项目的地方,执行命令:

scrapy startproject tutorial

该命令自动构建一个基本的scrapy项目。目录如下:
这里写图片描述

解释:

  • scrapy.cfg: 项目的配置文件
  • tutorial/items.py: 项目中的item文件.
  • tutorial/pipelines.py: 项目中的pipelines文件.
  • tutorial/settings.py: 项目的设置文件.
  • tutorial/spiders/: 放置spider代码的目录.

    定义Item

    Item 是保存爬取到的数据的容器;其使用方法和python字典类似, 并且提供了额外保护机制来避免拼写错误导致的未定义字段错误。

具体做法:以dmoz.org为例
- 创建一个scrapy.Item类。并定义scrapy.Field的类属性。根据dmoz.org对item建模,获取其名称,链接及网站描述。在tutorial/items.py进行编辑(后面很多方法基于item进行),在原本的class后面添加我们自己的class

class DmozItem(Item):
    title = Field()
    link = Field()
    desc = Field() 

####制作爬虫Spider

Spider是用户自己编写的类,用来从一个域(或域组)中抓取信息。

先爬后取:先获取整个网页内容,再提取对你有用的
1. 定义了用于下载的URL列表、跟踪链接的方案、解析网页内容的方式,以此来提取items。
2. 建立一个Spider,你必须scrapy.spider.BaseSpider创建一个子类,并确定三个强制的属性:

  • name:爬虫的识别名称,必须是唯一的,在不同的爬虫中你必须定义不同的名字。
  • start_urls:爬取的URL列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。
  • parse():解析的方法,调用的时候传入从每一个URL传回的Response对象作为唯一参数,负责解析并匹配抓取的数据(解析为item),跟踪更多的URL。

    1. 编写第一只爬虫,命名为dmoz_spider.py,保存在tutorial\spiders目录下:
from scrapy.spider import Spider

class DomzSpider(Spider):
    name = 'dmoz'
    allowed_domains = ["dmoz.org"]
    start_urls = [
       "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self,response):
        fileName = response.url.split('/')[-2]
        open(fileName,'wb').write(response.body)

部分解释:
allow_domains:爬虫的约束区域,此处规定爬虫只爬取这个域名下的网页。
parse函数:将链接的最后两个地址取出作为文件名进行存储。

  1. 在tutotial目录下打开后台,执行命令:scrapy crawl dmoz
    结果如下:
    这里写图片描述

错误;


引用了以下大神的文章:
[1]http://blog.csdn.net/playstudy/article/details/17296473
[2]http://f.dataguru.cn/thread-36396-1-1.html
[3]http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html#item

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!