成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用 Python + Scrapy 爬取視頻?

開發(fā) 后端
Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,我們只需要實(shí)現(xiàn)少量的代碼,就能夠快速的抓取.

[[403300]]

本文轉(zhuǎn)載自微信公眾號(hào)「快學(xué)Python」,作者快快。轉(zhuǎn)載本文請(qǐng)聯(lián)系快學(xué)Python公眾號(hào)。

人生苦短,快學(xué)Python!

今天將帶大家簡(jiǎn)單了解Scrapy爬蟲框架,并用一個(gè)真實(shí)案例來(lái)演示代碼的編寫和爬取過程。

一、scrapy簡(jiǎn)介

1. 什么是Scrapy

Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,我們只需要實(shí)現(xiàn)少量的代碼,就能夠快速的抓取

Scrapy使用了Twisted異步網(wǎng)絡(luò)框架,可以加快我們的下載速度

http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html

異步和非阻塞的區(qū)別

異步:調(diào)用在發(fā)出之后,這個(gè)調(diào)用就直接返回,不管有無(wú)結(jié)果

非阻塞:關(guān)注的是程序在等待調(diào)用結(jié)果時(shí)的狀態(tài),指在不能立刻得到結(jié)果之前,該調(diào)用不會(huì)阻塞當(dāng)前線程

2. Scrapy工作流程

另一種爬蟲方式

Scrapy工作流程

Scrapy engine(引擎) 總指揮:負(fù)責(zé)數(shù)據(jù)和信號(hào)的在不同模塊間的傳遞 scrapy已經(jīng)實(shí)現(xiàn)
Scheduler(調(diào)度器) 一個(gè)隊(duì)列,存放引擎發(fā)過來(lái)的request請(qǐng)求 scrapy已經(jīng)實(shí)現(xiàn)
Downloader(下載器) 下載把引擎發(fā)過來(lái)的requests請(qǐng)求,并返回給引擎 scrapy已經(jīng)實(shí)現(xiàn)
Spider(爬蟲) 處理引擎發(fā)來(lái)的response,提取數(shù)據(jù),提取url,并交給引擎 需要手寫
Item Pipline(管道) 處理引擎?zhèn)鬟^來(lái)的數(shù)據(jù),比如存儲(chǔ) 需要手寫
Downloader Middlewares(下載中間件) 可以自定義的下載擴(kuò)展,比如設(shè)置代理 一般不用手寫
Spider Middlewares(中間件) 可以自定義requests請(qǐng)求和進(jìn)行response過濾 一般不用手寫

3. Scrapy入門

  1. #1 創(chuàng)建一個(gè)scrapy項(xiàng)目 
  2. scrapy startproject mySpider 
  3.  
  4. #2 生成一個(gè)爬蟲 
  5. scrapy genspider demo "demo.cn" 
  6.  
  7. #3 提取數(shù)據(jù) 
  8. 完善spider 使用xpath等 
  9.  
  10. #4 保存數(shù)據(jù) 
  11. pipeline中保存數(shù)據(jù) 

在命令中運(yùn)行爬蟲

  1. scrapy crawl qb # qb爬蟲的名字 

在pycharm中運(yùn)行爬蟲

  1. from scrapy import cmdline 
  2.  
  3. cmdline.execute("scrapy crawl qb".split()) 

4. pipline使用

從pipeline的字典形可以看出來(lái),pipeline可以有多個(gè),而且確實(shí)pipeline能夠定義多個(gè)

為什么需要多個(gè)pipeline:

1 可能會(huì)有多個(gè)spider,不同的pipeline處理不同的item的內(nèi)容

2 一個(gè)spider的內(nèi)容可以要做不同的操作,比如存入不同的數(shù)據(jù)庫(kù)中

注意:

1 pipeline的權(quán)重越小優(yōu)先級(jí)越高

2 pipeline中process_item方法名不能修改為其他的名稱

5. 文件目錄結(jié)構(gòu)

文件配置:

setting:

  1. SPIDER_MODULES = ['st.spiders'
  2. NEWSPIDER_MODULE = 'st.spiders' 
  3. LOG_LEVEL = 'WARNING' # 這樣設(shè)置可以在運(yùn)行的時(shí)候不打印日志文件 
  4. ... 
  5. # Obey robots.txt rules 
  6. ROBOTSTXT_OBEY = False # 調(diào)整為false
  7. ... 
  8. # Override the default request headers: # 頭部信息,反爬 
  9. DEFAULT_REQUEST_HEADERS = { 
  10.     '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'
  11.   'Accept''text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
  12.   'Accept-Language''en'
  13. ... 
  14. ITEM_PIPELINES = { # 打開管道 
  15.    'st.pipelines.StPipeline': 300, 

為了運(yùn)行文件方便:新建start.py(和settings在同一目錄下),

  1. from scrapy import cmdline 
  2. cmdline.execute('scrapy crawl stsp'.split()) # 這里爬蟲項(xiàng)目名為stsp 

目前是這樣,后面提取數(shù)據(jù)的時(shí)候修改對(duì)應(yīng)文件 .

二、頁(yè)面分析

第一頁(yè)url:https://699pic.com/video-sousuo-0-18-0-0-0-1-4-popular-0-0-0-0-0-0.html

url規(guī)律:

  1. url = 'https://699pic.com/video-sousuo-0-18-0-0-0-{}-4-popular-0-0-0-0-0-0.html'.format(i) 

通過分析頁(yè)面知道視頻數(shù)據(jù)在li里面,如圖所示.現(xiàn)在問題就簡(jiǎn)單了。

三、解析數(shù)據(jù)

  1. def parse(self, response): 
  2.     # global count 
  3.     # count += 1 
  4.     # print(response) 
  5.     liList = response.xpath('//li') # 獲取所有的li,后面提取有用的 
  6.      
  7.     print(len(liList)) # 76(然后分析可知,第11個(gè)到第70個(gè)是我們需要的數(shù)據(jù)) 
  8.      
  9.     newfolderName = 'page{}'.format(count) # 文件夾的名字page1,page2,.... 
  10.     # 步驟二 創(chuàng)建一個(gè)新的文件夾 保存每頁(yè)的視頻 
  11.     if not os.path.exists(newfolderName): 
  12.         os.mkdir(newfolderName) 
  13.  
  14.     for li in liList[10:-6]: 
  15.         video_link = li.xpath("./a/div/video/@data-original").extract_first() 
  16.         videoLink = 'https:' + video_link # url拼接 
  17.         title = li.xpath("./a[2]/h3/text()").extract_first() 
  18.         # 下載數(shù)據(jù): 
  19.         res = requests.get(videoLink,headers=headers) 
  20.         data = res.content 
  21.                 
  22.         try: 
  23.             with open(newfolderName + '/' + title + '.mp4','wb'as f: 
  24.                  f.write(data) 
  25.                  print('%s下載成功'%title) 
  26.         except
  27.            break 

四、文件配置

items:

  1. import scrapy 
  2. class StItem(scrapy.Item): 
  3.     # define the fields for your item here like
  4.     # 和兩個(gè)對(duì)應(yīng)前面的數(shù)據(jù) 
  5.     videoLink = scrapy.Field() 
  6.     title = scrapy.Field() 
  7.     # pass 

設(shè)置好items文件后需要在爬蟲文件(stsp.py)頭部添加如下代碼:

  1. from st.items import StItem # 這個(gè)要設(shè)置根目錄文件即st 

然后調(diào)整stsp文件:

  1. item = StItem(videoLink=videoLink,title=title)yield item # 這里必須使用yield,如果使用return最后在管道中只能得到一個(gè)文件 

piplines:

  1. # 前面的注釋代碼 
  2. from itemadapter import ItemAdapter 
  3. import csv 
  4.  
  5. class StPipeline: 
  6.     def __init__(self): 
  7.         # 打開文件,指定方式為寫,利用第3個(gè)參數(shù)把csv寫數(shù)據(jù)時(shí)產(chǎn)生的空行消除 
  8.         self.f = open('Sp.csv','w',encoding='utf-8',newline=''
  9.         # 設(shè)置文件第一行的字段名,注意要跟spider傳過來(lái)的字典key名稱相同 
  10.         self.file_name = ['title''videoLink'
  11.         # 指定文件的寫入方式為csv字典寫入,參數(shù)1為指定具體文件,參數(shù)2為指定字段名 
  12.         self.writer = csv.DictWriter(self.f, fieldnames=self.file_name) 
  13.         # 寫入第一行字段名,因?yàn)橹灰獙懭胍淮危晕募旁赺_init__里面 
  14.         self.writer.writeheader() 
  15.  
  16.     def process_item(self, item, spider): 
  17.         # 寫入spider傳過來(lái)的具體數(shù)值 
  18.         self.writer.writerow(dict(item)) # 這里的item是上面創(chuàng)建出來(lái)的實(shí)例對(duì)象,需要轉(zhuǎn)換成dict 
  19.         # 寫入完返回 
  20.         return item 
  21.  
  22.     def close_spider(self,spider): 
  23.         self.f.close() 

五、批量爬取

  1. 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,每次執(zhí)行數(shù)據(jù)解析,就讓他+1 
  2. request = scrapy.Request(next_url) 
  3. yield request 

最后運(yùn)行程序:

csv文件:

page2.mp4文件:

 

 

責(zé)任編輯:武曉燕 來(lái)源: 快學(xué)Python
相關(guān)推薦

2020-12-02 09:42:42

PythonApp抖音視頻

2020-10-16 07:03:17

Scrapy爬蟲框架

2018-01-04 09:20:55

python爬蟲視頻彈幕

2017-11-17 19:56:46

爬蟲視頻信息數(shù)據(jù)庫(kù)

2017-06-29 11:11:17

2021-07-20 09:45:58

PythonEV短視頻

2017-11-20 09:46:08

python爬蟲Scrapy

2016-12-07 11:18:58

Python爬蟲網(wǎng)站

2017-05-24 15:07:19

Python爬蟲爬取

2018-01-16 18:43:18

爬蟲工具電影天堂

2019-01-02 12:23:30

Python金融數(shù)據(jù)爬取

2022-05-12 09:25:19

Python播放視頻攝像頭

2020-06-28 14:35:54

OBSWebSockets開源

2020-11-03 14:10:45

Python爬取天氣爬蟲

2023-08-29 09:31:01

Scrapy網(wǎng)頁(yè)爬蟲

2019-01-11 10:22:31

Python數(shù)據(jù)爬取

2021-01-24 16:40:00

Python爬取網(wǎng)站編程語(yǔ)言

2020-07-10 09:49:53

數(shù)據(jù)清理數(shù)據(jù)分析查找異常

2023-02-08 07:09:40

PythonChatGPT語(yǔ)言模型

2021-09-29 08:53:36

scrapy框架Twisted
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲综合大片69999 | 青青草一区 | www.com久久久| 欧美精品被 | 国产精品日本一区二区不卡视频 | 国产精品视频一区二区三区四区国 | 国产精品一区在线观看 | 国产精品日韩高清伦字幕搜索 | 国产欧美一区二区三区另类精品 | 美国一级片在线观看 | 天天干天天想 | 91精品国产91久久综合桃花 | 久久久精品一区 | 成人在线免费电影 | 成人高清网站 | 亚洲精品日韩精品 | 亚洲va欧美va天堂v国产综合 | 国产视频精品在线观看 | 中国美女撒尿txxxxx视频 | 在线免费小视频 | 国产高清在线视频 | 天天草夜夜骑 | 欧美5区 | 欧美综合自拍 | 91精品综合久久久久久五月天 | 天天操操操操操 | 日本久久久影视 | 欧美一区二区三区,视频 | 精品一二 | 中文字幕在线视频免费观看 | 国产精品99久久久久久人 | 国内av在线| 国产九九九 | 亚洲精品乱码久久久久久蜜桃 | 国产成人精品福利 | 一级h片 | 少妇午夜一级艳片欧美精品 | 91精品国产综合久久国产大片 | 中文字幕乱码一区二区三区 | 日韩不卡一区二区三区 | 欧美日韩综合一区 |