资讯专栏INFORMATION COLUMN

11、web爬虫讲解2—Scrapy框架爬虫—Scrapy使用

trilever / 1362人阅读

摘要:百度云搜索,搜各种资料搜网盘,搜各种资料表达式表示向下查找层指定标签,如表示查找所有标签表示向下查找一层指定的标签表示查找指定属性的值可以连缀如属性名称属性值表示查找指定属性等于指定值的标签可以连缀,如查找名称等于指定名称的标签获取标签文本

【百度云搜索,搜各种资料:http://www.lqkweb.com】
【搜网盘,搜各种资料:http://www.swpan.cn】

xpath表达式
  //x 表示向下查找n层指定标签,如://div 表示查找所有div标签
  /x 表示向下查找一层指定的标签
  /@x 表示查找指定属性的值,可以连缀如:@id @src
  [@属性名称="属性值"]表示查找指定属性等于指定值的标签,可以连缀 ,如查找class名称等于指定名称的标签 
  /text() 获取标签文本类容
  [x] 通过索引获取集合里的指定一个元素

1、将xpath表达式过滤出来的结果进行正则匹配,用正则取最终内容
最后.re("正则")

xpath("//div[@class="showlist"]/li//img")[0].re("alt="(w+)")

2、在选择器规则里应用正则进行过滤
[re:正则规则]

xpath("//div[re:test(@class, "showlist")]").extract()

实战使用Scrapy获取一个电商网站的、商品标题、商品链接、和评论数

分析源码

第一步、编写items.py容器文件

我们已经知道了我们要获取的是、商品标题、商品链接、和评论数

在items.py创建容器接收爬虫获取到的数据

设置爬虫获取到的信息容器类,必须继承scrapy.Item类

scrapy.Field()方法,定义变量用scrapy.Field()方法接收爬虫指定字段的信息

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy

#items.py,文件是专门用于,接收爬虫获取到的数据信息的,就相当于是容器文件

class AdcItem(scrapy.Item):    #设置爬虫获取到的信息容器类
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()      #接收爬虫获取到的title信息
    link = scrapy.Field()       #接收爬虫获取到的连接信息
    comment = scrapy.Field()    #接收爬虫获取到的商品评论数

第二步、编写pach.py爬虫文件

定义爬虫类,必须继承scrapy.Spider

name设置爬虫名称
allowed_domains设置爬取域名
start_urls设置爬取网址
parse(response)爬虫回调函数,接收response,response里是获取到的html数据对象
xpath()过滤器,参数是xpath表达式
extract()获取html数据对象里的数据
yield item 接收了数据的容器对象,返回给pipelies.py

# -*- coding: utf-8 -*-
import scrapy
from adc.items import AdcItem  #导入items.py里的AdcItem类,容器类

class PachSpider(scrapy.Spider):                 #定义爬虫类,必须继承scrapy.Spider
    name = "pach"                                #设置爬虫名称
    allowed_domains = ["search.dangdang.com"]    #爬取域名
    start_urls = ["http://category.dangdang.com/pg1-cid4008149.html"]     #爬取网址

    def parse(self, response):                   #parse回调函数
        item = AdcItem()                         #实例化容器对象
        item["title"] = response.xpath("//p[@class="name"]/a/text()").extract()  #表达式过滤获取到数据赋值给,容器类里的title变量
        # print(rqi["title"])
        item["link"] = response.xpath("//p[@class="name"]/a/@href").extract()    #表达式过滤获取到数据赋值给,容器类里的link变量
        # print(rqi["link"])
        item["comment"] = response.xpath("//p[@class="star"]//a/text()").extract() #表达式过滤获取到数据赋值给,容器类里的comment变量
        # print(rqi["comment"])
        yield item   #接收了数据的容器对象,返回给pipelies.py

robots协议

注意:如果获取的网站在robots.txt文件里设置了,禁止爬虫爬取协议,那么将无法爬取,因为scrapy默认是遵守这个robots这个国际协议的,如果想不遵守这个协议,需要在settings.py设置

到settings.py文件里找到ROBOTSTXT_OBEY变量,这个变量等于False不遵守robots协议,等于True遵守robots协议

# Obey robots.txt rules
ROBOTSTXT_OBEY = False   #不遵循robots协议

第三步、编写pipelines.py数据处理文件

如果需要pipelines.py里的数据处理类能工作,需在settings.py设置文件里的ITEM_PIPELINES变量里注册数据处理类

# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
   "adc.pipelines.AdcPipeline": 300,  #注册adc.pipelines.AdcPipeline类,后面一个数字参数表示执行等级,数值越大越先执行
}

注册后pipelines.py里的数据处理类就能工作

定义数据处理类,必须继承object
process_item(item)为数据处理函数,接收一个item,item里就是爬虫最后yield item 来的数据对象

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

class AdcPipeline(object):                      #定义数据处理类,必须继承object
    def process_item(self, item, spider):       #process_item(item)为数据处理函数,接收一个item,item里就是爬虫最后yield item 来的数据对象
        for i in range(0,len(item["title"])):   #可以通过item["容器名称"]来获取对应的数据列表
            title = item["title"][i]
            print(title)
            link = item["link"][i]
            print(link)
            comment = item["comment"][i]
            print(comment)
        return item

最后执行

执行爬虫文件,scrapy crawl pach --nolog

可以看到我们需要的数据已经拿到了
【转载自:http://www.lqkweb.com】

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45049.html

相关文章

  • 10、web爬虫讲解2Scrapy框架爬虫Scrapy安装—Scrapy指令

    摘要:负责处理被提取出来的。典型的处理有清理验证及持久化例如存取到数据库知识库项目的设置文件实现自定义爬虫的目录中间件是在引擎及之间的特定钩子,处理的输入和输出及。 【百度云搜索:http://www.bdyss.com】 【搜网盘:http://www.swpan.cn】 Scrapy框架安装 1、首先,终端执行命令升级pip: python -m pip install --upgrad...

    OnlyMyRailgun 评论0 收藏0
  • 12web爬虫讲解2Scrapy框架爬虫Scrapy模拟浏览器登录—获取Scrapy框架Coo

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料模拟浏览器登录方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于,返回的请求会替代里的请求请求,可以设置,回调函数表单提交,第一个必须参数,上一次响应的对象,其他参数,表单内容等可以将一个新 【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】 模拟浏览器登录...

    jay_tian 评论0 收藏0
  • 13、web爬虫讲解2Scrapy框架爬虫Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料爬取百度新闻,爬取动态生成的信息,抓取百度新闻首页的新闻地址有多网站,当你浏览器访问时看到的信息,在源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息,那么这种一般都是的动态请求生成的信 【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】 crapy爬取...

    Blackjun 评论0 收藏0
  • scrapy-redis分布式爬虫框架详解

    摘要:分布式爬虫框架详解随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。下载器中间件位于引擎和下载器之间的框架,主要是处理引擎与下载器之间的请求及响应。 scrapy-redis分布式爬虫框架详解 随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。由于互联网是开放的,每个人都可以在网络上...

    myeveryheart 评论0 收藏0

发表评论

0条评论

trilever

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<