日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学爬虫的动力是啥?那肯定就是爬美女图片了。6千多图片看到爽。

發布時間:2024/3/13 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学爬虫的动力是啥?那肯定就是爬美女图片了。6千多图片看到爽。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

scrapy框架介紹

scrapy是由Python語言開發的一個快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結構化的數據。

scrapy框架的傳送門:

https://scrapy.org

scrapy框架運行原理

Scrapy Engine(引擎):負者Spider、ItemPipeline、Downloader、Scheduler中間的通訊,信號、數據轉遞等。

Scheduler(調度器)?:它負責接受引擊發送過來的Request請求,并按照一定的方式進行整理排列,入隊,當引擎需要時,交還給引擎。

Downloader (下載器):負責下載Scrapy Engine(引擎)發送的所有Requests請求,并將其獲取到的Responses交還給Scrapy Engine(引擎) ,由引擎交給Spider來處理。

Spider (爬蟲)?:它負責處理所有Responses,從中分析提取數據,獲取Item字段需要的數據,并將需要跟進的URL提交給引擎,再次進入Scheduler(調度器)。

Item Pipeline(管道)?:它負責處理Spider 中獲取到的Item ,并進行進行后期處理(詳細分析、過濾、存儲等)的地方。

Downloader Middlewares (下載中間件)?: 你可以當作是一個可以自定義擴 展下載功能的組件。

Spider Middlewares?(Spider中間件)?: 你可以理解為是一個可以自定擴展和操作引擎和Spider中間通信的功能組件(比如進入Spider的Responses;和從Spider出去的Requests )

制作 Scrapy 爬蟲 一共需要4步:

新建項目?(scrapy startproject xxx):新建一個新的爬蟲項目

明確目標?(編寫items.py):明確你想要抓取的目標

制作爬蟲?(spiders/xxspider.py):制作爬蟲開始爬取網頁

存儲內容?(pipelines.py):設計管道存儲爬取內容

今天我們就以B站小姐姐為例,帶大家親自體驗一下scrapy的強大之處!

創建spider項目

首先我們來看看scrapy的常用命令:

scrapy?startproject?項目名稱????#?創建一個爬蟲項目或工程 scrapy?genspider?爬蟲名?域名?????#?在項目下創建一個爬蟲spider類 scrapy?runspider?爬蟲文件???????#運行一個爬蟲spider類 scrapy?list??????????????????#?查看當前項目有多少個爬蟲 scrapy?crawl?爬蟲名稱???????????#?通過名稱指定運行爬取信息 scrapy?shell?url/文件名????????#?使用shell進入scrapy交互環境

第一步我們創建一個scrapy工程, 進入到你指定的目錄下,使用命令:

scrapy?startproject?項目名稱????#?創建一個爬蟲項目或工程

此時可以看到該目錄下多了一個叫bbbbl的文件夾

當我們創建完項目之后,它會有提示,那么我們就按照它的提示繼續操作。

You can start your first spider with: cd BliBli scrapy genspider example example.com

當你按照上面的操作,之后你就會發現,在spiders文件夾下就會出現spider_bbbl.py這個文件。這個就是我們的爬蟲文件。

后面的?earch.bilibili.com就是我們要爬取的目標網站

BliBli |——?BliBli |???|——?__init__.py |???|——?__pycache__. |???|——?items.py????????#?Item定義,定義抓取的數據結構 |???|——?middlewares.py??#?定義Spider和Dowmloader和Middlewares中間件實現 |???|——?pipelines.py????#?它定義Item?Pipeline的實現,即定義數據管道 |???|——?settings.py?????#?它定義項目的全局配置 |???|__?spiders?????????#?其中包含一個個Spider的實現,每個Spider都有一個文件|——?__init__.py|——?spider_bl.py?#?爬蟲實現|——?__pycache__ |——?scrapy.cfg??# scrapy部署時的配置文件,定義了配置文件的路徑、部署相關的信息內容。

目標確定

接下來我們打開B站搜索 '小姐姐'如下。我們今天的任務很簡單,

視頻標題、視頻鏈接、視頻播放時長、視頻播放量、視頻發布時間、視頻作者還有封面圖片和視頻鏈接

網頁分析

我們打開網頁分析這是一個get請求

分頁是由參數page來控制的。所有的數據都存在于一個json格式的數據集里面

我們的目標就是獲取result列表中的數據

請求發送

設置item模板,定義我們要獲取的信息

????#?視頻標題title_video?=?scrapy.Field()#?視頻時長time_video?=?scrapy.Field()#?播放量num_video?=?scrapy.Field()#?發布時間date_rls?=?scrapy.Field()#?作者author?=?scrapy.Field()#?圖片鏈接link_pic?=?scrapy.Field()#?視頻地址link_video?=?scrapy.Field()

然后我們在我們創建的spider_bl.py文件中寫我們爬蟲函數的具體實現

bl_list?=?response.json()['data']['result'] ic(bl_list)

結果如下:

接下來我們提取我們所需的數據:

?for?bl?in?bl_list:#?視頻標題item['title_video']?=?bl['title']#?視頻時長item['time_video']?=?bl['duration']#?視頻播放量item['num_video']?=bl['video_review']#?發布時間date_rls?=?bl['pubdate']item['date_rls']?=?time.strftime('%Y-%m-%d?%H:%M',?time.localtime(date_rls))#?視頻作者item['author']?=?bl['author']#?圖片鏈接link_pic?=?bl['pic']item['link_pic']?=?'https:'+link_pic#?視頻鏈接item['link_video']?=?bl['arcurl']'''{'author':?'共青團中央','date_rls':?'2019-11-26?18:35','link_pic':?'https://i0.hdslb.com/bfs/archive/c24d34f04ba017e806c3554a9fc8c286f809a4b1.jpg','link_video':?'http://www.bilibili.com/video/av77087288','num_video':?1781,'time_video':?'2:7','title_video':?'《華服抄》隨風輕逸,蓮步生情(絕美華服小姐姐MV付)'}Excel數據成功保存!{'author':?'祖瑜兄','date_rls':?'2019-06-22?18:06','link_pic':?'https://i0.hdslb.com/bfs/archive/784607de4c3397af15838123a2fde8c1d301fb42.jpg','link_video':?'http://www.bilibili.com/video/av56450490','num_video':?5307,'time_video':?'9:51','title_video':?'5分鐘戲腔教程!滿滿干貨不廢話!京劇系小姐姐教你如何快速入門~趕緊收藏~(內有清唱示范)'}Excel數據成功保存!{'author':?'皮皮皮皮皮皮皮卡乒','date_rls':?'2020-09-02?16:36','link_pic':?'https://i1.hdslb.com/bfs/archive/39600c112ea656788740838d53df36fc3fe29e1f.jpg','link_video':?'http://www.bilibili.com/video/av754474482','num_video':?1148,'time_video':?'3:41','title_video':?'小姐姐:我等會你(溫柔聲)外賣小哥:我太感動了!'}Excel數據成功保存!{'author':?'小疼聊音樂','date_rls':?'2020-06-19?17:47','link_pic':?'https://i1.hdslb.com/bfs/archive/d5bc2336899759fc5bc3cd3742f76d2846609fbd.jpg','link_video':?'http://www.bilibili.com/video/av668575442','num_video':?814,'time_video':?'3:29','title_video':?'小姐姐隨口哼兩句,沒想到引發整棟樓的合唱!這屆畢業生太慘了!'}Excel數據成功保存!{'author':?'奇視界','date_rls':?'2019-11-26?10:39','link_pic':?'https://i0.hdslb.com/bfs/archive/d0c1937e9dbccf2c639be865763e41df78f0bed5.jpg','link_video':?'http://www.bilibili.com/video/av77065062','num_video':?1583,'time_video':?'4:58','title_video':?'兩個鋼鐵直男交流追女孩子方法,讓坐在邊上的小姐姐笑噴了'}'''

我們現在pipeline中打印一下,沒問題我們再將其保存到本地.

當我們要把數據保存成文件的時候,不需要任何額外的代碼,只要執行如下代碼即可:

scrapy?crawl?spider爬蟲名?-o?xxx.json??????#保存為JSON文件scrapy?crawl?spider爬蟲名?-o?xxx.jl或jsonlines????#每個Item輸出一行jsonscrapy?crawl?spider爬蟲名?-o?xxx.csv??????????#保存為csv文件scrapy?crawl?spider爬蟲名?-o?xxx.xml?#保存為xml文件

想要保存為什么格式的文件,只要修改后綴就可以了,在這里我就不一一例舉了。

我們在此將其保存為json格式

class?BbbblPipeline:def?process_item(self,?item,?spider):#?保存文件到本地with?open('./B站小姐姐.json',?'a+',?encoding='utf-8')?as?f:lines?=?json.dumps(dict(item),?ensure_ascii=False)?+?'\n'f.write(lines)return?item

settings.py找到以下字段,取消字段的注釋

#?Obey?robots.txt?rules ROBOTSTXT_OBEY?=?False#?Override?the?default?request?headers: DEFAULT_REQUEST_HEADERS?=?{"User-Agent"?:?str(UserAgent().random),'Accept':?'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' }#?Configure?item?pipelines #?See?https://docs.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES?=?{'BliBli.pipelines.BbbblPipeline':?300, }

使用如下命令運行程序:可以看到產生了一個json文件

scrapy?crawl?spider_bbbbl

打開文件可以看到已經成功的獲取到了我們想要的數據

保存數據Excel

我們使用openpyxl將數據保存到excel中便于后面的數據分析,我們先在pipeline.py中定義一個ExcelPipeline的函數,

??#?名稱ws.append(['視頻標題',?'視頻時長',?'視頻播放量',?'發布時間',?'視頻作者',?'圖片鏈接',?'視頻鏈接'])#?存儲line?=?[item['title_video'],?item['time_video'],?item['num_video'],?item['date_rls'],?item['author'],?item['link_pic'],item['link_video']]ws.append(line)wb.save('../B站小姐姐.xlsx')

然后在settings中打開這個通道的開關,資源就會下載下來。

ITEM_PIPELINES?=?{'bbbbl.pipelines.BbbblPipeline':?300,'bbbbl.pipelines.ExcelPipeline':?301, }

結果如下,我們會在scrapy目錄下發現一個我們下載數據的excel

可以看到數據全部已經成功下載到excel中

保存數據Mysql

之前我有分享過最新Mysql8.0的下載安裝以及常見問題的處理,尚未安裝的小伙伴可以參考一下

Python操作mysql(上)!一文帶你看懂!

Python操作mysql(下)!一文帶你看懂!
?

跟保存excel的方式大同小異,區別在于Mysql除了要在setting中配置Pipeline外,還要配置Mysql端口、用戶和密碼等參數

#?配置Mysql MYSQL_HOST?=?'localhost' MYSQL_DATABASE?=?'BLBL' MYSQL_USER?=?'root' MYSQL_PASSWORD?=?'211314' MYSQL_PORT?=?3306

此外我們還需再Pipeline.py中定義一個MysqlPipeline的類

然后在其中寫Sql并且執行。

??#?Sql建表命令sql?=?'''CREATE?TABLE?bbbbl3(id?int?primary?key?auto_increment,?title_video??VARCHAR(200)?NOT?NULL,?time_video??VARCHAR(100),?num_video??INTEGER,?date_rls??VARCHAR(100),?author??VARCHAR(100),?link_pic??VARCHAR(1000),?link_video?VARCHAR(1000));'''#?執行建表Sqlcursor.execute(sql)#?插入數據value?=?(item["title_video"],?item["time_video"],?item["num_video"],?item["date_rls"],?item["author"],?item["link_pic"],?item["link_video"])#?執行操作sql?=?"insert?into?bbbbl3(title_video,time_video,num_video,date_rls,author,link_pic,link_video)?value?(%s,%s,%s,%s,%s,%s,%s)"#?提交數據self.db.commit()#?關閉數據庫self.db.close()

我使用的Mysql可視化工具是Sqlyog,

執行完查詢語句顯示如下:

圖片保存

封面小姐姐的鏈接已經獲取到了,接下來我們要做的就是將這些小姐姐下載到我的馬克思主義文件夾下

#?保存圖片到本地with?open('images/{}.jpg'.format(item['title_video']),?'wb')?as?f:req?=?requests.get(item['link_pic'])f.write(req.content)time.sleep(random.random()?*?4)

為了防止被網址反爬,加了延時處理

結果如下:

總結

以上是生活随笔為你收集整理的学爬虫的动力是啥?那肯定就是爬美女图片了。6千多图片看到爽。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。