资讯专栏INFORMATION COLUMN

小白爬虫scrapy第三篇

laznrbfe / 1446人阅读

摘要:基于的树状结构,提供在数据结构树中找寻节点的能力。起初的提出的初衷是将其作为一个通用的介于与间的语法模型。

在你的spiders目录下创建自己第一个爬虫项目,我我这儿命名为AiquerSpider.py
然后编辑文件

# !/usr/bin/python
# -*- coding: UTF-8 -*-
import scrapy
from scrapy.http import Request

以上是我所需要导入使用的包,你也可以自定义别的包.
接下来咱们创建类:

# !/usr/bin/python
# -*- coding: UTF-8 -*-
import scrapy
from scrapy.http import Request

class AiquerSpider(scrapy.Spider):
    # name 定义爬虫名称
    name = ""
    # allowed_domains定义访问域
    allowed_domains = []
    # bash_url定义要爬取的网站
    bash_url = ""

    # 这个方法是必须有不然你的爬虫跑不起来(同等java中的main方法)
    def parse(self, response):
        
        pass

在写代码之前呢咱们要去做点大事,具体看下面,嘿嘿!
咱们要首先定义集合就是items.py中用来存放的数据
咱们看看网页吧,在具体说需要哪些东西.

上面呢我们需要网站地址用户名称视频图片视频地址
下载视频的话我这儿就不做讲解了我们就获取这几个参数为例子
首先,我们需要爱奇艺网站用户地址做分析

http://www.iqiyi.com/u/141242...
http://www.iqiyi.com/u/用户ID 这一段是找到用户网站首页
/v 这个是该用户下的视频
这样我们就了解到了如何去手动指定用户并且爬取他下面的视频了
废话不多说,先上items的代码

# -*- 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


class AiquerItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 视频名称
    video_name = scrapy.Field()
    # 视频时间
    video_time = scrapy.Field()
    # 视频图片路径
    video_imgurl = scrapy.Field()
    # 视频路径
    video_url = scrapy.Field()
    pass

我们的items就写完了
再回到咱们的爬虫上面,具体解释都在里面的注释中了

# !/usr/bin/python
# -*- coding: UTF-8 -*-
# 这里是自己导入的包
import scrapy
from scrapy.http import Request
from AiQuer.items import AiquerItem
# 定义类
class AiquerSpider(scrapy.Spider):
    # http://www.iqiyi.com/u/1412422046/v?page=1&video_type=1
    # name 定义爬虫名称
    name = "AiquerSpider"
    # allowed_domains定义访问域
    allowed_domains = ["iqiyi.com"]
    # bash_url定义要爬取的网站
    bash_url = "http://www.iqiyi.com/u/"
    # 做拼接地址的结尾
    bashurl = "/v?page=1"
    user_id = None

    # 用来获取输入的用户编号返回拼接地址
    def start(self):
        self.user_id = self.validateIsNull(input(u"请输入用户编号:"))
        if self.user_id:
            url = self.bash_url + self.user_id + self.bashurl
            return url


    def start_requests(self):
        # 首先获取用户首页地址
        url = self.start()
        # Request函数第一个是地址,第二个是调用的方法
        yield Request(url, self.max_page)
        #yield Request("http://www.iqiyi.com/u/1412422046/v?page=2", self.parse)

    # 非空验证
    def validateIsNull(self, user_id):
        if user_id.strip() == "":
            return None
        else:
            return user_id

    # 获取最大页数
    def max_page(self, response):
        max_num = int(response.xpath("//div//a[last()-1]/text()").extract()[0])
        for i in range(1, max_num + 1):
            url = self.bash_url + self.user_id + "/v?page=" + str(i) + "&video_type=1"
            # print(url)
            yield Request(url, self.parse)

    # 获取页面需要的数据
    def parse(self, response):
        item = AiquerItem()
        # 注释代码块用来做测试的,小伙伴可以拿出来一个一个测试
        """
        names = response.xpath("//ul/li//div//p//a/@title").extract()
        times = response.xpath("//div//span[@class="mod-listTitle_right"]/text()").extract()
        imgurls = response.xpath("//div[@class="site-piclist_pic"]//a//img/@src").extract()
        urls = response.xpath("//div[@class="site-piclist_pic"]//a/@href").extract()
        print(names)
        print(times)
        print(imgurls)
        print(urls)
        """
        # 通过xpath去寻找HTML页面中指定数据封装在items类中
        item["video_name"] = response.xpath("//ul/li//div//p//a/@title").extract()
        item["video_time"] = response.xpath("//div//span[@class="mod-listTitle_right"]/text()").extract()
        item["video_imgurl"] = response.xpath("//div[@class="site-piclist_pic"]//a//img/@src").extract()
        item["video_url"] = response.xpath("//div[@class="site-piclist_pic"]//a/@href").extract()
        return item

有同学肯定会问("//div[@class="site-piclist_pic"]//a/@href")这是啥玩意
Xpath:

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。 
起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。

在这篇中是要有点XPath的基础的可以先去看看这个教程配合这个教程一起写提高XPath熟练度.
教程链接:XPath教程
接下来就是如何保存这些数据了
介绍两种一个是直接保存为文件,另外一个是保存到数据库
请看下篇

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

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

相关文章

  • 小白爬虫scrapy第一篇

    摘要:如果想先学习的话推荐看下基础教学菜鸟教程这个网站的教程里面的内容还是挺不错的非常适合小白学习好了废话不多说开始学习如何安装吧安装我上篇小白爬虫篇简介下面的链接安装包后在或者在中输入命令过程中可能会问你是否安装其他扩展包选按回车就好了安装完成 如果想先学习python的话推荐看下Python基础教学|菜鸟教程这个网站的教程,里面的内容还是挺不错的非常适合小白学习好了废话不多说开始学习如何...

    beanlam 评论0 收藏0
  • 小白爬虫scrapy第四篇

    摘要:没有做具体数据处理了直接把他们保存为数据了很长很长一段眼花下一篇是如何去保存在数据库中 在上篇中没有说到启动如何去启动,scrapy是使用cmd命令行去启动的咱们用scrapy的cmdline去启动命名point.py # 导入cmdline 中的execute用来执行cmd命令 from scrapy.cmdline import execute # 执行cmd命令参数为[ scra...

    cnio 评论0 收藏0
  • 小白爬虫scrapy第二篇

    摘要:创建爬虫项目我创建的项目名称为用打开项目可以看到目录结构如下根目录有个是他的配置文件用来存放你的爬虫文件我就不做解释了存放集合中间件用来自定义插件在这里咱们用不到这玩意用来存储数据这个还用解释吗你可以在中看到这个他们的具体介绍就去看入门到奔 创建爬虫项目 scrapy startproject (projectName) 我创建的项目名称为AIQuery scrapy startpro...

    booster 评论0 收藏0
  • 非计算机专业小白自学爬虫全指南(附资源)

    摘要:爬虫是我接触计算机编程的入门。练练练本文推荐的资源就是以项目练习带动爬虫学习,囊括了大部分爬虫工程师要求的知识点。拓展阅读一文了解爬虫与反爬虫最后,请注意,爬虫的工作机会相对较少。 爬虫是我接触计算机编程的入门。哥当年写第一行代码的时候别提有多痛苦。 本文旨在用一篇文章说透爬虫如何自学可以达到找工作的要求。 爬虫的学习就是跟着实际项目去学,每个项目会涉及到不同的知识点,项目做多了,自然...

    CarlBenjamin 评论0 收藏0

发表评论

0条评论

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