您现在的位置是:亿华云 > 应用开发
如何用 Python + Scrapy 爬取视频?
亿华云2025-10-03 20:32:19【应用开发】9人已围观
简介本文转载自微信公众号「快学Python」,作者快快。转载本文请联系快学Python公众号。人生苦短,快学Python!今天将带大家简单了解Scrapy爬虫框架,并用一个真实案例来演示代码的编写和爬取过
本文转载自微信公众号「快学Python」,何用作者快快。视频转载本文请联系快学Python公众号。何用
人生苦短,视频快学Python!
今天将带大家简单了解Scrapy爬虫框架,何用并用一个真实案例来演示代码的视频编写和爬取过程。
一、何用scrapy简介
1. 什么是视频Scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的何用应用框架,我们只需要实现少量的视频代码,就能够快速的何用抓取
Scrapy使用了Twisted异步网络框架,可以加快我们的视频下载速度
http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
异步和非阻塞的区别
异步:调用在发出之后,这个调用就直接返回,何用不管有无结果
非阻塞:关注的视频是程序在等待调用结果时的状态,指在不能立刻得到结果之前,何用该调用不会阻塞当前线程
2. Scrapy工作流程
另一种爬虫方式
Scrapy工作流程
3. Scrapy入门
#1 创建一个scrapy项目 scrapy startproject mySpider #2 生成一个爬虫 scrapy genspider demo "demo.cn" #3 提取数据 完善spider 使用xpath等 #4 保存数据 pipeline中保存数据在命令中运行爬虫
scrapy crawl qb # qb爬虫的名字在pycharm中运行爬虫
from scrapy import cmdline cmdline.execute("scrapy crawl qb".split())4. pipline使用
从pipeline的字典形可以看出来,pipeline可以有多个,而且确实pipeline能够定义多个
为什么需要多个pipeline:
1 可能会有多个spider,不同的pipeline处理不同的item的内容
2 一个spider的内容可以要做不同的操作,比如存入不同的数据库中
注意:
1 pipeline的权重越小优先级越高
2 pipeline中process_item方法名不能修改为其他的名称
5. 文件目录结构
文件配置:
setting:
SPIDER_MODULES = [st.spiders] NEWSPIDER_MODULE = st.spiders LOG_LEVEL = WARNING # 这样设置可以在运行的时候不打印日志文件 ... # Obey robots.txt rules ROBOTSTXT_OBEY = False # 调整为false, ... # Override the default request headers: # 头部信息,反爬 DEFAULT_REQUEST_HEADERS = { user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36, Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8, Accept-Language: en, } ... ITEM_PIPELINES = { # 打开管道 st.pipelines.StPipeline: 300, }为了运行文件方便:新建start.py(和settings在同一目录下),
from scrapy import cmdline cmdline.execute(scrapy crawl stsp.split()) # 这里爬虫项目名为stsp目前是这样,后面提取数据的时候修改对应文件 .
二、页面分析
第一页url:https://699pic.com/video-sousuo-0-18-0-0-0-1-4-popular-0-0-0-0-0-0.html
url规律:
url = https://699pic.com/video-sousuo-0-18-0-0-0-{ }-4-popular-0-0-0-0-0-0.html.format(i)通过分析页面知道视频数据在li里面,如图所示.现在问题就简单了。
三、解析数据
def parse(self, response): # global count # count += 1 # print(response) liList = response.xpath(//li) # 获取所有的li,后面提取有用的云南idc服务商 print(len(liList)) # 76(然后分析可知,第11个到第70个是我们需要的数据) newfolderName = page{ }.format(count) # 文件夹的名字page1,page2,.... # 步骤二 创建一个新的文件夹 保存每页的视频 if not os.path.exists(newfolderName): os.mkdir(newfolderName) for li in liList[10:-6]: video_link = li.xpath("./a/div/video/@data-original").extract_first() videoLink = https: + video_link # url拼接 title = li.xpath("./a[2]/h3/text()").extract_first() # 下载数据: res = requests.get(videoLink,headers=headers) data = res.content try: with open(newfolderName + / + title + .mp4,wb) as f: f.write(data) print(%s下载成功%title) except: break四、文件配置
items:
import scrapy class StItem(scrapy.Item): # define the fields for your item here like: # 和两个对应前面的数据 videoLink = scrapy.Field() title = scrapy.Field() # pass设置好items文件后需要在爬虫文件(stsp.py)头部添加如下代码:
from st.items import StItem # 这个要设置根目录文件即st然后调整stsp文件:
item = StItem(videoLink=videoLink,title=title)yield item # 这里必须使用yield,如果使用return最后在管道中只能得到一个文件piplines:
# 前面的注释代码 from itemadapter import ItemAdapter import csv class StPipeline: def __init__(self): # 打开文件,指定方式为写,利用第3个参数把csv写数据时产生的空行消除 self.f = open(Sp.csv,w,encoding=utf-8,newline=) # 设置文件第一行的字段名,注意要跟spider传过来的字典key名称相同 self.file_name = [title, videoLink] # 指定文件的写入方式为csv字典写入,参数1为指定具体文件,参数2为指定字段名 self.writer = csv.DictWriter(self.f, fieldnames=self.file_name) # 写入第一行字段名,因为只要写入一次,所以文件放在__init__里面 self.writer.writeheader() def process_item(self, item, spider): # 写入spider传过来的具体数值 self.writer.writerow(dict(item)) # 这里的item是上面创建出来的实例对象,需要转换成dict # 写入完返回 return item def close_spider(self,spider): self.f.close()五、批量爬取
next_url = https://699pic.com/video-sousuo-0-18-0-0-0-{ }-4-popular-0-0-0-0-0-0.html.format(count) # 这里的count是初始化的全局变量count,每次执行数据解析,就让他+1 request = scrapy.Request(next_url) yield request最后运行程序:
csv文件:
page2.mp4文件:
很赞哦!(7)
相关文章
- 为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
- 什么因素可以决定企业域名?有什么攻略可以选择?
- 为什么love域名抢不停?love域名有何寓意?
- 选域名有些容易忽略的地方?小白选域名要知道什么?
- 为什么大家都选优质域名?到底存在着什么好处?
- 企业起域名方法有哪些?新手要掌握什么?
- 新手如何进行域名预订?要注意域名预订什么?
- 对域名估价怎么看?新手有什么方法进行域名价值参考?
- 4、企业无形资产:通用网站已成为企业网络知识产权的重要组成部分,属于企业的无形资产,也有助于提升企业的品牌形象和技术领先形象。它是企业品牌资产不可或缺的一部分。
- 新手注册一个域名需要多少费用呢?域名价格都一样吗?