小白爬虫scrapy第三篇
在你的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教程
接下来就是如何保存这些数据了
介绍两种一个是直接保存为文件,另外一个是保存到数据库
请看下篇
相关推荐
CycloneKid 2020-10-27
ZHANGRENXIANG00 2020-06-28
fangjack 2020-06-25
qyf 2020-06-14
javaraylu 2020-05-16
hilary0 2020-05-15
fangjack 2020-05-08
夜斗不是神 2020-11-17
染血白衣 2020-11-16
ARCXIANG 2020-11-02
ARCXIANG 2020-10-28
荒谬小孩 2020-10-26
逍遥友 2020-10-26
snakeson 2020-10-09
meylovezn 2020-08-28
囧芝麻 2020-08-17
数据挖掘工人 2020-08-15
cxcxrs 2020-07-28