Scrapy入门及第一个程序

Scrapy入门及第一个程序

标签:Scrapy ;第一个Scrapy项目
一、认识Scrapy

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

二、爬虫编写步骤

1.新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
2.明确目标 (编写items.py):明确你想要抓取的目标
3.制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
4.存储内容 (pipelines.py):设计管道存储爬取内容

三、具体实现过程:
在开始之前,我们需要创建一个新的Scrapy项目。然后进入自定义的目录中,运行下列命令:

scrapy startproject myfirstpjt

其中,myfirstpjt 为项目名称,可以看到将会创建一个 myfirstpjt 文件夹,目录结构如下:

接下面来来简单介绍一下各个主要文件的作用:

scrapy.cfg :项目的配置文件

myfirstpjt :项目的Python模块,将会从这里引用代码

myfirstpjt/items.py :项目的目标文件

myfirstpjt/pipelines.py :项目的管道文件

myfirstpjt/settings.py :项目的设置文件

myfirstpjt/spiders/ :存储爬虫代码目录

二、编写items文件(myfirstpjt/items.py)

我们打算抓取:sina.com.cn
网站里的一些新闻之类的信息。

打开mySpider目录下的items.py
Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。
可以通过创建一个 scrapy.Item 类, 并且定义类型为
scrapy.Field的类属性来定义一个Item。
接下来,创建一个ItcastItem 类,和构建item模型(model)。

import scrapy
class MyfirstpjtItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    urlname = scrapy.Field()
    urlkey = scrapy.Field()
    urlcr = scrapy.Field()
    urladdr = scrapy.Field()

三、制作爬虫 (spiders/itcastSpider.py)

爬虫功能要分两步:

  1. 爬数据

在当前目录下输入命令,将在myfirstpjt/spider目录下创建一个名为wesuen的爬虫:

import scrapy
from myfirstpjt.items import MyfirstpjtItem

class WeisuenSpider(scrapy.Spider):
    name = "weisuen"
    allowed_domains = ["sina.com.cn"]
    start_urls = (
        'http://slide.news.sina.com.cn/s/slide_1_2841_103185.html',
        'http://slide.mil.news.sina.com.cn/k/slide_8_193_45192.html#p=1',
        'http://news.sina.com.cn/pl/2016-09-12/doc-ifxvukhv8147404.shtml',
    )

    def parse(self, response):
        item=MyfirstpjtItem()
        item["urlname"]=response.xpath("/html/head/title/text()")
        print(item["urlname"])

四、XPath
接下来介绍一下XPath:
XPath主要根据网页代码的不同筛选数据,
比如代码:

<html>
<head><title>标题</title></head>
<body>
<h2>
爬虫与Scrapy
</h2>
<p>....
</p>
</body>
</html>

我们要提取上面标签里的信息,我们可以这样:
用‘/’来选择某个标签,比如要提取

对应的内容,我们可以用:/html/body/h2
如果需要文本信息的话,可以用text()实现:
/html/body/h2/text()
当然,出现多个标签的时候,我们也可以用‘//’来吧所有的信息提取出来,比如

标签:
//p

在平时,我们有事会看到这样的代码:

<div class="1212">
<div class="2255">
<img scr="http://snbjbcishnso....." class ="f">
<img scr="http://snbjbcishnso....." class ="f">
</div>

如果想获得所有属性X的值为Y的标签的内容,可以使用”//Z[@X=”Y”]”的方式,比如,想获取上书代码中class 属性为f的标签的内容,可以根据这种方式获取:
//img[@class =”f”]
好了,差不多就是这些了,我也是参考书籍来做的,不足之处,大家指点!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值