
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 網(wǎng)站怎么做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞、方法和優(yōu)化技巧)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-02-26 15:18
網(wǎng)站怎么做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞、方法和優(yōu)化技巧)
百度 收錄 請求 - 為什么百度沒(méi)有索引您的 網(wǎng)站
網(wǎng)站添加阿里媽媽廣告導致百度收錄少或沒(méi)有收錄!如果一定要改程序,建議你徹底關(guān)閉網(wǎng)站1個(gè)月后再重新上傳你的程序,這樣百度會(huì )認為你是新站點(diǎn),網(wǎng)站會(huì )容易很多@收錄。因為cn域名比較便宜,很多人用cn域名做垃圾郵件網(wǎng)站,影響百度很多cn自有網(wǎng)頁(yè)收錄少或沒(méi)有收錄!...
網(wǎng)站如何做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞,方法和優(yōu)化技巧!
今天就和大家聊聊網(wǎng)站、網(wǎng)站關(guān)鍵詞分類(lèi)優(yōu)化中最重要的一項。那么接下來(lái)就講講網(wǎng)站優(yōu)化關(guān)鍵詞的分類(lèi)方法、優(yōu)化技巧!那么網(wǎng)站關(guān)鍵詞怎么分類(lèi)呢?4、brands關(guān)鍵詞:一般設置在每頁(yè)標題的最后,是網(wǎng)站關(guān)鍵詞的唯一性,也是常見(jiàn)的建立品牌的方式品牌。2、根據網(wǎng)站優(yōu)化:關(guān)鍵詞大致可以分為核心詞、需求詞、品牌詞。網(wǎng)站關(guān)鍵詞有哪些優(yōu)化技巧...
什么是 SEO 內部鏈接和外部鏈接 - 外部鏈接和內部鏈接有什么區別?
什么是外部鏈接?例如,百度是一個(gè)常見(jiàn)的外部鏈接。什么是內部鏈接?面比較重要,可以先抓收錄。有了內部鏈接和外部鏈接的解釋?zhuān)呀?jīng)知道了外部鏈接和內部鏈接的區別。垃圾網(wǎng)站你也投票,那你的投票權就會(huì )越來(lái)越小。做外鏈和內鏈需要注意什么?所以一個(gè)好的網(wǎng)站必須有很多外部鏈接。沒(méi)有投票,所以你在論壇上發(fā)帖是沒(méi)有用的??焖僭鲩L(cháng)或快速...
SEO優(yōu)化的優(yōu)勢——SEO優(yōu)化和SEM競價(jià)的優(yōu)缺點(diǎn)和區別
PPC的優(yōu)缺點(diǎn):搜索引擎優(yōu)化的優(yōu)缺點(diǎn):1、價(jià)格低,網(wǎng)站維持排名一年的成本可能只做一到兩個(gè)月,競價(jià)是比較便宜很多。3、手機、MP3等難以區分和競爭關(guān)鍵詞,排名難優(yōu)化,時(shí)間長(cháng),價(jià)格高,太難的話(huà)不適合優(yōu)化。通過(guò)對以上優(yōu)缺點(diǎn)的總結和分析,網(wǎng)站優(yōu)化的整體效果遠勝于競品排名,價(jià)格也優(yōu)于競品…… 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
網(wǎng)站怎么做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞、方法和優(yōu)化技巧)

百度 收錄 請求 - 為什么百度沒(méi)有索引您的 網(wǎng)站
網(wǎng)站添加阿里媽媽廣告導致百度收錄少或沒(méi)有收錄!如果一定要改程序,建議你徹底關(guān)閉網(wǎng)站1個(gè)月后再重新上傳你的程序,這樣百度會(huì )認為你是新站點(diǎn),網(wǎng)站會(huì )容易很多@收錄。因為cn域名比較便宜,很多人用cn域名做垃圾郵件網(wǎng)站,影響百度很多cn自有網(wǎng)頁(yè)收錄少或沒(méi)有收錄!...

網(wǎng)站如何做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞,方法和優(yōu)化技巧!
今天就和大家聊聊網(wǎng)站、網(wǎng)站關(guān)鍵詞分類(lèi)優(yōu)化中最重要的一項。那么接下來(lái)就講講網(wǎng)站優(yōu)化關(guān)鍵詞的分類(lèi)方法、優(yōu)化技巧!那么網(wǎng)站關(guān)鍵詞怎么分類(lèi)呢?4、brands關(guān)鍵詞:一般設置在每頁(yè)標題的最后,是網(wǎng)站關(guān)鍵詞的唯一性,也是常見(jiàn)的建立品牌的方式品牌。2、根據網(wǎng)站優(yōu)化:關(guān)鍵詞大致可以分為核心詞、需求詞、品牌詞。網(wǎng)站關(guān)鍵詞有哪些優(yōu)化技巧...
什么是 SEO 內部鏈接和外部鏈接 - 外部鏈接和內部鏈接有什么區別?
什么是外部鏈接?例如,百度是一個(gè)常見(jiàn)的外部鏈接。什么是內部鏈接?面比較重要,可以先抓收錄。有了內部鏈接和外部鏈接的解釋?zhuān)呀?jīng)知道了外部鏈接和內部鏈接的區別。垃圾網(wǎng)站你也投票,那你的投票權就會(huì )越來(lái)越小。做外鏈和內鏈需要注意什么?所以一個(gè)好的網(wǎng)站必須有很多外部鏈接。沒(méi)有投票,所以你在論壇上發(fā)帖是沒(méi)有用的??焖僭鲩L(cháng)或快速...

SEO優(yōu)化的優(yōu)勢——SEO優(yōu)化和SEM競價(jià)的優(yōu)缺點(diǎn)和區別
PPC的優(yōu)缺點(diǎn):搜索引擎優(yōu)化的優(yōu)缺點(diǎn):1、價(jià)格低,網(wǎng)站維持排名一年的成本可能只做一到兩個(gè)月,競價(jià)是比較便宜很多。3、手機、MP3等難以區分和競爭關(guān)鍵詞,排名難優(yōu)化,時(shí)間長(cháng),價(jià)格高,太難的話(huà)不適合優(yōu)化。通過(guò)對以上優(yōu)缺點(diǎn)的總結和分析,網(wǎng)站優(yōu)化的整體效果遠勝于競品排名,價(jià)格也優(yōu)于競品……
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)項目學(xué)習之爬取地址特點(diǎn)通過(guò)右鍵的分析方法(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 368 次瀏覽 ? 2022-02-26 10:23
1、總結
目的:學(xué)習爬蟲(chóng)項目,使用requests方法爬取百度貼吧美容吧每篇帖子的圖片,并保存在本地。
方法:首先通過(guò)requests請求美容吧網(wǎng)頁(yè)的內容;二、通過(guò)xpath方法清理數據,獲取每個(gè)post的url地址;再次請求每個(gè)帖子的地址,從每個(gè)帖子地址爬取圖片鏈接;最后,請求圖像數據并將數據以二進(jìn)制格式保存在本地。
2、網(wǎng)頁(yè)分析
如下圖,這是本次爬取的目標網(wǎng)站,百度美吧,要求:爬取每個(gè)帖子里的圖片,保存到本地。爬取網(wǎng)站首先需要分析網(wǎng)站的特征。需要分析的內容包括:網(wǎng)站頁(yè)面的特征、post url地址的特征、圖片鏈接地址的獲取方式。以下是我需要分析的內容:
2.1 美容吧網(wǎng)頁(yè)特色
美容棒:%E7%BE%8E%E5%A5%B3&ie=utf-8&pn=0
觀(guān)察可以看出kw為搜索內容,pn為頁(yè)碼,第一頁(yè)為0,第二頁(yè)為50,所以頁(yè)碼的公式為pn=(頁(yè)數-1)*50。
2.2 Post url 地址功能
通過(guò)右鍵-勾選,可以查看網(wǎng)頁(yè)的源代碼信息,從中我們可以定位到每個(gè)帖子的代碼,如下圖:
可以看到,點(diǎn)擊“我真的很漂亮”的帖子,定位到代碼,可見(jiàn)帖子的url地址在這段代碼中;然后點(diǎn)擊href =p/6593341944,發(fā)現跳轉到帖子“我真的很漂亮”太漂亮了,此時(shí)的url地址是:,所以可以發(fā)現帖子的地址主要是由兩部分組成:+href的內容,所以我們只需要爬取href =p/6593341944的內容,然后拼接,就可以得到每個(gè)帖子的地址。
通過(guò)xpath_help工具,寫(xiě): //div[@class="threadlist_title pull_left j_th_tit "]/a/@href 得到每個(gè)url地址的一部分。
2.3 獲取帖子的圖片鏈接
獲取每個(gè)帖子的鏈接,通過(guò)類(lèi)似操作找到帖子中圖片的鏈接地址,如下圖定位到圖片的鏈接
同理,通過(guò)xpath_help匹配圖片鏈接,代碼為://img[@class="BDE_Image"]/@src
3、程序代碼:
# -*- 編碼:utf-8 -*-import requestsfrom lxml import etreeimport os#爬蟲(chóng)類(lèi)BtcSpider(object):def __init__(self):#爬取美女圖片#解析:美妝吧url地址,pn值決定頁(yè)碼, pn = 0 第一頁(yè), pn = 50 第二頁(yè)...self.url = '%E7%BE%8E%E5%A5%B3&ie=utf-8&pn={}'self.headers = { ' User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',}os.makedirs('美顏圖片',exist_ok=True)self.dir = '美顏圖片\\'#發(fā)送請求def get_response(self,url):response = requests.get(url,headers = self.headers)data = response.textreturn data#發(fā)送請求獲取網(wǎng)頁(yè)數據,數據以二進(jìn)制內容形式讀取 def get_data(self,url) :data = requests.get(url,headers = self.headers).contentreturn data#parse data, 封裝 xpathdef get_xpath(self,html,pattern):#build tree p = etree.HTML(html)#解析網(wǎng)頁(yè)內容,獲取url_listsresult = p.xpath(pattern)return result#下載圖片 &def download_src(self,url):html = self.get_response(url)html = html.replace ("
內容 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)項目學(xué)習之爬取地址特點(diǎn)通過(guò)右鍵的分析方法(圖))
1、總結
目的:學(xué)習爬蟲(chóng)項目,使用requests方法爬取百度貼吧美容吧每篇帖子的圖片,并保存在本地。
方法:首先通過(guò)requests請求美容吧網(wǎng)頁(yè)的內容;二、通過(guò)xpath方法清理數據,獲取每個(gè)post的url地址;再次請求每個(gè)帖子的地址,從每個(gè)帖子地址爬取圖片鏈接;最后,請求圖像數據并將數據以二進(jìn)制格式保存在本地。
2、網(wǎng)頁(yè)分析
如下圖,這是本次爬取的目標網(wǎng)站,百度美吧,要求:爬取每個(gè)帖子里的圖片,保存到本地。爬取網(wǎng)站首先需要分析網(wǎng)站的特征。需要分析的內容包括:網(wǎng)站頁(yè)面的特征、post url地址的特征、圖片鏈接地址的獲取方式。以下是我需要分析的內容:
2.1 美容吧網(wǎng)頁(yè)特色
美容棒:%E7%BE%8E%E5%A5%B3&ie=utf-8&pn=0
觀(guān)察可以看出kw為搜索內容,pn為頁(yè)碼,第一頁(yè)為0,第二頁(yè)為50,所以頁(yè)碼的公式為pn=(頁(yè)數-1)*50。
2.2 Post url 地址功能
通過(guò)右鍵-勾選,可以查看網(wǎng)頁(yè)的源代碼信息,從中我們可以定位到每個(gè)帖子的代碼,如下圖:
可以看到,點(diǎn)擊“我真的很漂亮”的帖子,定位到代碼,可見(jiàn)帖子的url地址在這段代碼中;然后點(diǎn)擊href =p/6593341944,發(fā)現跳轉到帖子“我真的很漂亮”太漂亮了,此時(shí)的url地址是:,所以可以發(fā)現帖子的地址主要是由兩部分組成:+href的內容,所以我們只需要爬取href =p/6593341944的內容,然后拼接,就可以得到每個(gè)帖子的地址。
通過(guò)xpath_help工具,寫(xiě): //div[@class="threadlist_title pull_left j_th_tit "]/a/@href 得到每個(gè)url地址的一部分。
2.3 獲取帖子的圖片鏈接
獲取每個(gè)帖子的鏈接,通過(guò)類(lèi)似操作找到帖子中圖片的鏈接地址,如下圖定位到圖片的鏈接
同理,通過(guò)xpath_help匹配圖片鏈接,代碼為://img[@class="BDE_Image"]/@src
3、程序代碼:
# -*- 編碼:utf-8 -*-import requestsfrom lxml import etreeimport os#爬蟲(chóng)類(lèi)BtcSpider(object):def __init__(self):#爬取美女圖片#解析:美妝吧url地址,pn值決定頁(yè)碼, pn = 0 第一頁(yè), pn = 50 第二頁(yè)...self.url = '%E7%BE%8E%E5%A5%B3&ie=utf-8&pn={}'self.headers = { ' User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',}os.makedirs('美顏圖片',exist_ok=True)self.dir = '美顏圖片\\'#發(fā)送請求def get_response(self,url):response = requests.get(url,headers = self.headers)data = response.textreturn data#發(fā)送請求獲取網(wǎng)頁(yè)數據,數據以二進(jìn)制內容形式讀取 def get_data(self,url) :data = requests.get(url,headers = self.headers).contentreturn data#parse data, 封裝 xpathdef get_xpath(self,html,pattern):#build tree p = etree.HTML(html)#解析網(wǎng)頁(yè)內容,獲取url_listsresult = p.xpath(pattern)return result#下載圖片 &def download_src(self,url):html = self.get_response(url)html = html.replace ("
內容
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 爬蟲(chóng)通用爬蟲(chóng)技術(shù)框架爬蟲(chóng)系統的誕生蜘蛛爬蟲(chóng)系統)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 76 次瀏覽 ? 2022-02-25 19:13
爬蟲(chóng)通用爬蟲(chóng)技術(shù)框架爬蟲(chóng)系統的誕生蜘蛛爬蟲(chóng)系統)
干貨全流程| 入門(mén)級爬蟲(chóng)技術(shù)原理,這就夠了
爬蟲(chóng)系統的誕生
蜘蛛爬蟲(chóng)
一般搜索引擎的處理對象是互聯(lián)網(wǎng)頁(yè)面。目前,互聯(lián)網(wǎng)頁(yè)面數量已達100億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是:如何設計一個(gè)高效的下載系統,將如此海量的網(wǎng)頁(yè)數據傳輸到本地?;ヂ?lián)網(wǎng)網(wǎng)頁(yè)的鏡像備份在本地形成。
網(wǎng)絡(luò )爬蟲(chóng)可以發(fā)揮這樣的作用,完成這項艱巨的任務(wù)。它是搜索引擎系統中一個(gè)非常關(guān)鍵和基本的組件。本文主要介紹網(wǎng)絡(luò )爬蟲(chóng)相關(guān)的技術(shù)。雖然爬蟲(chóng)經(jīng)過(guò)幾十年的發(fā)展,在整體框架上已經(jīng)比較成熟,但隨著(zhù)互聯(lián)網(wǎng)的不斷發(fā)展,它們也面臨著(zhù)一些新的挑戰。
通用爬蟲(chóng)技術(shù)框架
爬蟲(chóng)系統首先從互聯(lián)網(wǎng)頁(yè)面中精心挑選一些網(wǎng)頁(yè),將這些網(wǎng)頁(yè)的鏈接地址作為種子URL,將這些種子放入待爬取的URL隊列中。爬蟲(chóng)依次讀取要爬取的URL,通過(guò)DNS Parse傳遞URL,將鏈接地址轉換為網(wǎng)站服務(wù)器對應的IP地址。然后把它和網(wǎng)頁(yè)的相對路徑名交給網(wǎng)頁(yè)下載器,網(wǎng)頁(yè)下載器負責下載網(wǎng)頁(yè)。對于下載到本地的網(wǎng)頁(yè),一方面是存儲在頁(yè)庫中,等待索引等后續處理;另一方面,將下載網(wǎng)頁(yè)的URL放入爬取隊列,記錄爬蟲(chóng)系統已經(jīng)下載的網(wǎng)頁(yè)URL,避免系統重復爬取。對于剛剛下載的網(wǎng)頁(yè),提取其中收錄的所有鏈接信息,并在下載的URL隊列中進(jìn)行檢查。如果發(fā)現該鏈接沒(méi)有被爬取,則將其放在待爬取的URL隊列的末尾。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。
常見(jiàn)爬蟲(chóng)架構
以上是一般爬蟲(chóng)的整體流程。從宏觀(guān)上看,動(dòng)態(tài)爬取過(guò)程中的爬蟲(chóng)與互聯(lián)網(wǎng)上所有網(wǎng)頁(yè)的關(guān)系可以概括為以下五個(gè)部分:
下載網(wǎng)頁(yè)的綁定:爬蟲(chóng)從互聯(lián)網(wǎng)上下載到本地索引的網(wǎng)頁(yè)的集合。
過(guò)期網(wǎng)頁(yè)組合:由于網(wǎng)頁(yè)數量較多,爬蟲(chóng)完成一輪完整的爬取需要較長(cháng)時(shí)間。在爬取過(guò)程中,很多下載的網(wǎng)頁(yè)可能已經(jīng)更新,導致過(guò)期。原因是互聯(lián)網(wǎng)上的網(wǎng)頁(yè)處于不斷動(dòng)態(tài)變化的過(guò)程中,很容易產(chǎn)生本地網(wǎng)頁(yè)內容與真實(shí)互聯(lián)網(wǎng)的不一致。
待下載網(wǎng)頁(yè)集合:URL隊列中待爬取的網(wǎng)頁(yè),這些網(wǎng)頁(yè)即將被爬蟲(chóng)下載。
已知網(wǎng)頁(yè)集合:這些網(wǎng)頁(yè)沒(méi)有被爬蟲(chóng)下載,也沒(méi)有出現在待爬取的URL隊列中。通過(guò)已經(jīng)爬取的網(wǎng)頁(yè)或者待爬取的URL隊列中的網(wǎng)頁(yè),總是可以通過(guò)鏈接關(guān)系找到它們。稍后會(huì )被爬蟲(chóng)抓取和索引。
未知網(wǎng)頁(yè)的集合:一些網(wǎng)頁(yè)無(wú)法被爬蟲(chóng)抓取,這些網(wǎng)頁(yè)構成了未知網(wǎng)頁(yè)的組合。實(shí)際上,這部分頁(yè)面占比很高。
互聯(lián)網(wǎng)頁(yè)面劃分
從理解爬蟲(chóng)的角度來(lái)看,以上對互聯(lián)網(wǎng)頁(yè)面的劃分有助于深入理解搜索引擎爬蟲(chóng)面臨的主要任務(wù)和挑戰。絕大多數爬蟲(chóng)系統都遵循上述流程,但并非所有爬蟲(chóng)系統都如此一致。根據具體的應用,爬蟲(chóng)系統在很多方面都有所不同。一般來(lái)說(shuō),爬蟲(chóng)系統可以分為以下三種。
批處理式爬蟲(chóng):批處理式爬蟲(chóng)的抓取范圍和目標比較明確。當爬蟲(chóng)達到這個(gè)設定的目標時(shí),它會(huì )停止爬取過(guò)程。至于具體的目標,可能不一樣,可能是設置爬取一定數量的網(wǎng)頁(yè),也可能是設置爬取時(shí)間等等,都不一樣。
增量爬蟲(chóng):與批量爬蟲(chóng)不同,增量爬蟲(chóng)會(huì )不斷地爬取。抓取到的網(wǎng)頁(yè)要定期更新,因為互聯(lián)網(wǎng)網(wǎng)頁(yè)在不斷變化,新網(wǎng)頁(yè)、網(wǎng)頁(yè)被刪除或網(wǎng)頁(yè)內容發(fā)生變化是常有的事,增量爬蟲(chóng)需要及時(shí)反映這種變化,所以在不斷的爬取過(guò)程,他們要么是在爬取新的網(wǎng)頁(yè),要么是在更新現有的網(wǎng)頁(yè)。常見(jiàn)的商業(yè)搜索引擎爬蟲(chóng)基本屬于這一類(lèi)。
垂直爬蟲(chóng):垂直爬蟲(chóng)專(zhuān)注于屬于特定行業(yè)的特定主題或網(wǎng)頁(yè)。比如健康網(wǎng)站,你只需要從互聯(lián)網(wǎng)頁(yè)面中找到健康相關(guān)的頁(yè)面內容,其他行業(yè)的內容是沒(méi)有的??紤]范圍。垂直爬蟲(chóng)最大的特點(diǎn)和難點(diǎn)之一是如何識別網(wǎng)頁(yè)內容是否屬于指定行業(yè)或主題。從節省系統資源的角度來(lái)看,下載后不可能屏蔽所有的互聯(lián)網(wǎng)頁(yè)面,這樣會(huì )造成資源的過(guò)度浪費。爬蟲(chóng)往往需要在爬取階段動(dòng)態(tài)識別某個(gè)URL是否與主題相關(guān),盡量不使用。爬取不相關(guān)的頁(yè)面以達到節省資源的目的。垂直搜索網(wǎng)站或垂直行業(yè)網(wǎng)站往往需要這種爬蟲(chóng)。
好的爬行動(dòng)物的特征
一個(gè)優(yōu)秀爬蟲(chóng)的特性可能針對不同的應用有不同的實(shí)現方式,但是一個(gè)實(shí)用的爬蟲(chóng)應該具備以下特性。
01高性能
互聯(lián)網(wǎng)上的網(wǎng)頁(yè)數量非常龐大。因此,爬蟲(chóng)的性能非常重要。這里的性能主要是指爬蟲(chóng)下載網(wǎng)頁(yè)的爬取速度。常用的評價(jià)方法是用爬蟲(chóng)每秒可以下載的網(wǎng)頁(yè)數量作為性能指標。單位時(shí)間內可以下載的網(wǎng)頁(yè)越多,爬蟲(chóng)的性能就越高。
為了提高爬蟲(chóng)的性能,設計時(shí)程序訪(fǎng)問(wèn)磁盤(pán)的操作方式和具體實(shí)現時(shí)數據結構的選擇至關(guān)重要。例如,對于待爬取的URL隊列和已爬取的URL隊列,由于URL的數量非常多,不同實(shí)現方式的性能非常重要。性能差異很大,所以高效的數據結構對爬蟲(chóng)性能影響很大。
02 可擴展性
即使單個(gè)爬蟲(chóng)的性能很高,將所有網(wǎng)頁(yè)下載到本地仍然需要很長(cháng)時(shí)間。為了盡可能地縮短爬取周期,爬蟲(chóng)系統應該具有良好的可擴展性,即很容易增加 Crawl 的服務(wù)器和爬蟲(chóng)的數量來(lái)實(shí)現這一點(diǎn)。
目前實(shí)用的大型網(wǎng)絡(luò )爬蟲(chóng)必須以分布式方式運行,即多臺服務(wù)器專(zhuān)門(mén)進(jìn)行爬蟲(chóng),每臺服務(wù)器部署多個(gè)爬蟲(chóng),每個(gè)爬蟲(chóng)多線(xiàn)程運行,以多種方式增加并發(fā)。對于大型搜索引擎服務(wù)商來(lái)說(shuō),數據中心也可能會(huì )部署在全球、不同區域,爬蟲(chóng)也被分配到不同的數據中心,這對于提升爬蟲(chóng)系統的整體性能非常有幫助。
03 魯棒性
當爬蟲(chóng)想要訪(fǎng)問(wèn)各種類(lèi)型的網(wǎng)站服務(wù)器時(shí),可能會(huì )遇到很多異常情況,比如網(wǎng)頁(yè)的HTML編碼不規則,被爬取的服務(wù)器突然崩潰,甚至出現爬蟲(chóng)陷阱。爬蟲(chóng)能夠正確處理各種異常情況是非常重要的,否則它可能會(huì )時(shí)不時(shí)停止工作,這是難以忍受的。
從另一個(gè)角度來(lái)說(shuō),假設爬蟲(chóng)程序在爬取過(guò)程中死掉了,或者爬蟲(chóng)所在的服務(wù)器宕機了,一個(gè)健壯的爬蟲(chóng)應該可以做到。當爬蟲(chóng)再次啟動(dòng)時(shí),它可以恢復之前爬取的內容和數據結構。不必每次都從頭開(kāi)始做所有的工作,這也是爬蟲(chóng)健壯性的體現。
04友善
爬蟲(chóng)的友好性有兩層含義:一是保護網(wǎng)站的部分隱私,二是減少被爬取的網(wǎng)站的網(wǎng)絡(luò )負載。爬蟲(chóng)爬取的對象是各種類(lèi)型的網(wǎng)站。對于網(wǎng)站的擁有者來(lái)說(shuō),有些內容不想被所有人搜索到,所以需要設置一個(gè)協(xié)議來(lái)告知爬蟲(chóng)哪些內容不是。允許爬行。目前,實(shí)現這一目標的主流方法有兩種:爬蟲(chóng)禁止協(xié)議和網(wǎng)頁(yè)禁止標記。
爬蟲(chóng)禁止協(xié)議是指網(wǎng)站的擁有者生成的指定文件robot.txt,放在網(wǎng)站服務(wù)器的根目錄下。該文件表示網(wǎng)站中哪些目錄下面的網(wǎng)頁(yè)不允許被爬蟲(chóng)爬取。在爬取網(wǎng)站的網(wǎng)頁(yè)之前,友好的爬蟲(chóng)必須先讀取robot.txt文件,并且不會(huì )下載被禁止爬取的網(wǎng)頁(yè)。
網(wǎng)頁(yè)禁止標簽一般在網(wǎng)頁(yè)的HTML代碼中通過(guò)添加metaimage-package">
索引網(wǎng)頁(yè)與互聯(lián)網(wǎng)網(wǎng)頁(yè)
爬取的本地網(wǎng)頁(yè)很可能發(fā)生了變化,或者被刪除,或者內容發(fā)生了變化,因為爬蟲(chóng)完成一輪爬取需要很長(cháng)時(shí)間,所以部分爬取的網(wǎng)頁(yè)肯定是過(guò)期的。因此,網(wǎng)頁(yè)庫中的過(guò)期數據越少,網(wǎng)頁(yè)的新鮮度就越好,對提升用戶(hù)體驗大有裨益。如果新穎性不好,搜索結果全是過(guò)時(shí)數據,或者網(wǎng)頁(yè)被刪除,用戶(hù)的內心感受可想而知。
盡管 Internet 上有很多網(wǎng)頁(yè),但每個(gè)網(wǎng)頁(yè)都有很大的不同。例如,騰訊和網(wǎng)易新聞的網(wǎng)頁(yè)與作弊網(wǎng)頁(yè)一樣重要。如果搜索引擎抓取的網(wǎng)頁(yè)大部分都是比較重要的網(wǎng)頁(yè),就可以說(shuō)明他們在抓取網(wǎng)頁(yè)的重要性方面做得很好。你在這方面做得越好,搜索引擎就會(huì )越準確。
通過(guò)以上三個(gè)標準的分析,爬蟲(chóng)開(kāi)發(fā)的目標可以簡(jiǎn)單描述為:在資源有限的情況下,由于搜索引擎只能爬取互聯(lián)網(wǎng)上現有網(wǎng)頁(yè)的一部分,所以更重要的部分應盡可能選擇。要索引的頁(yè)面;對于已經(jīng)爬取的頁(yè)面,盡快更新內容,使被索引頁(yè)面的內容與互聯(lián)網(wǎng)上對應頁(yè)面的內容同步更新;網(wǎng)頁(yè)。三個(gè)“盡可能”基本明確了爬蟲(chóng)系統提升用戶(hù)體驗的目標。
為了滿(mǎn)足這三個(gè)質(zhì)量標準,大型商業(yè)搜索引擎開(kāi)發(fā)了多套針對性強的爬蟲(chóng)系統。以谷歌為例,至少有兩種不同的爬蟲(chóng)系統,一種叫做Fresh Bot,主要考慮網(wǎng)頁(yè)的新鮮度。對于內容更新頻繁的網(wǎng)頁(yè),目前更新周期可以達到秒級;另一組稱(chēng)為 Deep Crawl Bot,主要針對更新不頻繁、更新周期為幾天的網(wǎng)頁(yè)抓取。此外,谷歌在開(kāi)發(fā)暗網(wǎng)爬蟲(chóng)系統方面也投入了大量精力。以后有時(shí)間講解暗網(wǎng)系統。
谷歌的兩個(gè)爬蟲(chóng)系統
如果你對爬蟲(chóng)感興趣,還可以閱讀:
干貨全流程| 解密爬蟲(chóng)爬取更新網(wǎng)頁(yè)的策略方法
網(wǎng)絡(luò )爬蟲(chóng) | 你不知道的暗網(wǎng)是怎么爬的?
網(wǎng)絡(luò )爬蟲(chóng) | 你知道分布式爬蟲(chóng)是如何工作的嗎? 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
爬蟲(chóng)通用爬蟲(chóng)技術(shù)框架爬蟲(chóng)系統的誕生蜘蛛爬蟲(chóng)系統)
干貨全流程| 入門(mén)級爬蟲(chóng)技術(shù)原理,這就夠了
爬蟲(chóng)系統的誕生
蜘蛛爬蟲(chóng)
一般搜索引擎的處理對象是互聯(lián)網(wǎng)頁(yè)面。目前,互聯(lián)網(wǎng)頁(yè)面數量已達100億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是:如何設計一個(gè)高效的下載系統,將如此海量的網(wǎng)頁(yè)數據傳輸到本地?;ヂ?lián)網(wǎng)網(wǎng)頁(yè)的鏡像備份在本地形成。
網(wǎng)絡(luò )爬蟲(chóng)可以發(fā)揮這樣的作用,完成這項艱巨的任務(wù)。它是搜索引擎系統中一個(gè)非常關(guān)鍵和基本的組件。本文主要介紹網(wǎng)絡(luò )爬蟲(chóng)相關(guān)的技術(shù)。雖然爬蟲(chóng)經(jīng)過(guò)幾十年的發(fā)展,在整體框架上已經(jīng)比較成熟,但隨著(zhù)互聯(lián)網(wǎng)的不斷發(fā)展,它們也面臨著(zhù)一些新的挑戰。
通用爬蟲(chóng)技術(shù)框架
爬蟲(chóng)系統首先從互聯(lián)網(wǎng)頁(yè)面中精心挑選一些網(wǎng)頁(yè),將這些網(wǎng)頁(yè)的鏈接地址作為種子URL,將這些種子放入待爬取的URL隊列中。爬蟲(chóng)依次讀取要爬取的URL,通過(guò)DNS Parse傳遞URL,將鏈接地址轉換為網(wǎng)站服務(wù)器對應的IP地址。然后把它和網(wǎng)頁(yè)的相對路徑名交給網(wǎng)頁(yè)下載器,網(wǎng)頁(yè)下載器負責下載網(wǎng)頁(yè)。對于下載到本地的網(wǎng)頁(yè),一方面是存儲在頁(yè)庫中,等待索引等后續處理;另一方面,將下載網(wǎng)頁(yè)的URL放入爬取隊列,記錄爬蟲(chóng)系統已經(jīng)下載的網(wǎng)頁(yè)URL,避免系統重復爬取。對于剛剛下載的網(wǎng)頁(yè),提取其中收錄的所有鏈接信息,并在下載的URL隊列中進(jìn)行檢查。如果發(fā)現該鏈接沒(méi)有被爬取,則將其放在待爬取的URL隊列的末尾。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。
常見(jiàn)爬蟲(chóng)架構
以上是一般爬蟲(chóng)的整體流程。從宏觀(guān)上看,動(dòng)態(tài)爬取過(guò)程中的爬蟲(chóng)與互聯(lián)網(wǎng)上所有網(wǎng)頁(yè)的關(guān)系可以概括為以下五個(gè)部分:
下載網(wǎng)頁(yè)的綁定:爬蟲(chóng)從互聯(lián)網(wǎng)上下載到本地索引的網(wǎng)頁(yè)的集合。
過(guò)期網(wǎng)頁(yè)組合:由于網(wǎng)頁(yè)數量較多,爬蟲(chóng)完成一輪完整的爬取需要較長(cháng)時(shí)間。在爬取過(guò)程中,很多下載的網(wǎng)頁(yè)可能已經(jīng)更新,導致過(guò)期。原因是互聯(lián)網(wǎng)上的網(wǎng)頁(yè)處于不斷動(dòng)態(tài)變化的過(guò)程中,很容易產(chǎn)生本地網(wǎng)頁(yè)內容與真實(shí)互聯(lián)網(wǎng)的不一致。
待下載網(wǎng)頁(yè)集合:URL隊列中待爬取的網(wǎng)頁(yè),這些網(wǎng)頁(yè)即將被爬蟲(chóng)下載。
已知網(wǎng)頁(yè)集合:這些網(wǎng)頁(yè)沒(méi)有被爬蟲(chóng)下載,也沒(méi)有出現在待爬取的URL隊列中。通過(guò)已經(jīng)爬取的網(wǎng)頁(yè)或者待爬取的URL隊列中的網(wǎng)頁(yè),總是可以通過(guò)鏈接關(guān)系找到它們。稍后會(huì )被爬蟲(chóng)抓取和索引。
未知網(wǎng)頁(yè)的集合:一些網(wǎng)頁(yè)無(wú)法被爬蟲(chóng)抓取,這些網(wǎng)頁(yè)構成了未知網(wǎng)頁(yè)的組合。實(shí)際上,這部分頁(yè)面占比很高。
互聯(lián)網(wǎng)頁(yè)面劃分
從理解爬蟲(chóng)的角度來(lái)看,以上對互聯(lián)網(wǎng)頁(yè)面的劃分有助于深入理解搜索引擎爬蟲(chóng)面臨的主要任務(wù)和挑戰。絕大多數爬蟲(chóng)系統都遵循上述流程,但并非所有爬蟲(chóng)系統都如此一致。根據具體的應用,爬蟲(chóng)系統在很多方面都有所不同。一般來(lái)說(shuō),爬蟲(chóng)系統可以分為以下三種。
批處理式爬蟲(chóng):批處理式爬蟲(chóng)的抓取范圍和目標比較明確。當爬蟲(chóng)達到這個(gè)設定的目標時(shí),它會(huì )停止爬取過(guò)程。至于具體的目標,可能不一樣,可能是設置爬取一定數量的網(wǎng)頁(yè),也可能是設置爬取時(shí)間等等,都不一樣。
增量爬蟲(chóng):與批量爬蟲(chóng)不同,增量爬蟲(chóng)會(huì )不斷地爬取。抓取到的網(wǎng)頁(yè)要定期更新,因為互聯(lián)網(wǎng)網(wǎng)頁(yè)在不斷變化,新網(wǎng)頁(yè)、網(wǎng)頁(yè)被刪除或網(wǎng)頁(yè)內容發(fā)生變化是常有的事,增量爬蟲(chóng)需要及時(shí)反映這種變化,所以在不斷的爬取過(guò)程,他們要么是在爬取新的網(wǎng)頁(yè),要么是在更新現有的網(wǎng)頁(yè)。常見(jiàn)的商業(yè)搜索引擎爬蟲(chóng)基本屬于這一類(lèi)。
垂直爬蟲(chóng):垂直爬蟲(chóng)專(zhuān)注于屬于特定行業(yè)的特定主題或網(wǎng)頁(yè)。比如健康網(wǎng)站,你只需要從互聯(lián)網(wǎng)頁(yè)面中找到健康相關(guān)的頁(yè)面內容,其他行業(yè)的內容是沒(méi)有的??紤]范圍。垂直爬蟲(chóng)最大的特點(diǎn)和難點(diǎn)之一是如何識別網(wǎng)頁(yè)內容是否屬于指定行業(yè)或主題。從節省系統資源的角度來(lái)看,下載后不可能屏蔽所有的互聯(lián)網(wǎng)頁(yè)面,這樣會(huì )造成資源的過(guò)度浪費。爬蟲(chóng)往往需要在爬取階段動(dòng)態(tài)識別某個(gè)URL是否與主題相關(guān),盡量不使用。爬取不相關(guān)的頁(yè)面以達到節省資源的目的。垂直搜索網(wǎng)站或垂直行業(yè)網(wǎng)站往往需要這種爬蟲(chóng)。
好的爬行動(dòng)物的特征
一個(gè)優(yōu)秀爬蟲(chóng)的特性可能針對不同的應用有不同的實(shí)現方式,但是一個(gè)實(shí)用的爬蟲(chóng)應該具備以下特性。
01高性能
互聯(lián)網(wǎng)上的網(wǎng)頁(yè)數量非常龐大。因此,爬蟲(chóng)的性能非常重要。這里的性能主要是指爬蟲(chóng)下載網(wǎng)頁(yè)的爬取速度。常用的評價(jià)方法是用爬蟲(chóng)每秒可以下載的網(wǎng)頁(yè)數量作為性能指標。單位時(shí)間內可以下載的網(wǎng)頁(yè)越多,爬蟲(chóng)的性能就越高。
為了提高爬蟲(chóng)的性能,設計時(shí)程序訪(fǎng)問(wèn)磁盤(pán)的操作方式和具體實(shí)現時(shí)數據結構的選擇至關(guān)重要。例如,對于待爬取的URL隊列和已爬取的URL隊列,由于URL的數量非常多,不同實(shí)現方式的性能非常重要。性能差異很大,所以高效的數據結構對爬蟲(chóng)性能影響很大。
02 可擴展性
即使單個(gè)爬蟲(chóng)的性能很高,將所有網(wǎng)頁(yè)下載到本地仍然需要很長(cháng)時(shí)間。為了盡可能地縮短爬取周期,爬蟲(chóng)系統應該具有良好的可擴展性,即很容易增加 Crawl 的服務(wù)器和爬蟲(chóng)的數量來(lái)實(shí)現這一點(diǎn)。
目前實(shí)用的大型網(wǎng)絡(luò )爬蟲(chóng)必須以分布式方式運行,即多臺服務(wù)器專(zhuān)門(mén)進(jìn)行爬蟲(chóng),每臺服務(wù)器部署多個(gè)爬蟲(chóng),每個(gè)爬蟲(chóng)多線(xiàn)程運行,以多種方式增加并發(fā)。對于大型搜索引擎服務(wù)商來(lái)說(shuō),數據中心也可能會(huì )部署在全球、不同區域,爬蟲(chóng)也被分配到不同的數據中心,這對于提升爬蟲(chóng)系統的整體性能非常有幫助。
03 魯棒性
當爬蟲(chóng)想要訪(fǎng)問(wèn)各種類(lèi)型的網(wǎng)站服務(wù)器時(shí),可能會(huì )遇到很多異常情況,比如網(wǎng)頁(yè)的HTML編碼不規則,被爬取的服務(wù)器突然崩潰,甚至出現爬蟲(chóng)陷阱。爬蟲(chóng)能夠正確處理各種異常情況是非常重要的,否則它可能會(huì )時(shí)不時(shí)停止工作,這是難以忍受的。
從另一個(gè)角度來(lái)說(shuō),假設爬蟲(chóng)程序在爬取過(guò)程中死掉了,或者爬蟲(chóng)所在的服務(wù)器宕機了,一個(gè)健壯的爬蟲(chóng)應該可以做到。當爬蟲(chóng)再次啟動(dòng)時(shí),它可以恢復之前爬取的內容和數據結構。不必每次都從頭開(kāi)始做所有的工作,這也是爬蟲(chóng)健壯性的體現。
04友善
爬蟲(chóng)的友好性有兩層含義:一是保護網(wǎng)站的部分隱私,二是減少被爬取的網(wǎng)站的網(wǎng)絡(luò )負載。爬蟲(chóng)爬取的對象是各種類(lèi)型的網(wǎng)站。對于網(wǎng)站的擁有者來(lái)說(shuō),有些內容不想被所有人搜索到,所以需要設置一個(gè)協(xié)議來(lái)告知爬蟲(chóng)哪些內容不是。允許爬行。目前,實(shí)現這一目標的主流方法有兩種:爬蟲(chóng)禁止協(xié)議和網(wǎng)頁(yè)禁止標記。
爬蟲(chóng)禁止協(xié)議是指網(wǎng)站的擁有者生成的指定文件robot.txt,放在網(wǎng)站服務(wù)器的根目錄下。該文件表示網(wǎng)站中哪些目錄下面的網(wǎng)頁(yè)不允許被爬蟲(chóng)爬取。在爬取網(wǎng)站的網(wǎng)頁(yè)之前,友好的爬蟲(chóng)必須先讀取robot.txt文件,并且不會(huì )下載被禁止爬取的網(wǎng)頁(yè)。
網(wǎng)頁(yè)禁止標簽一般在網(wǎng)頁(yè)的HTML代碼中通過(guò)添加metaimage-package">
索引網(wǎng)頁(yè)與互聯(lián)網(wǎng)網(wǎng)頁(yè)
爬取的本地網(wǎng)頁(yè)很可能發(fā)生了變化,或者被刪除,或者內容發(fā)生了變化,因為爬蟲(chóng)完成一輪爬取需要很長(cháng)時(shí)間,所以部分爬取的網(wǎng)頁(yè)肯定是過(guò)期的。因此,網(wǎng)頁(yè)庫中的過(guò)期數據越少,網(wǎng)頁(yè)的新鮮度就越好,對提升用戶(hù)體驗大有裨益。如果新穎性不好,搜索結果全是過(guò)時(shí)數據,或者網(wǎng)頁(yè)被刪除,用戶(hù)的內心感受可想而知。
盡管 Internet 上有很多網(wǎng)頁(yè),但每個(gè)網(wǎng)頁(yè)都有很大的不同。例如,騰訊和網(wǎng)易新聞的網(wǎng)頁(yè)與作弊網(wǎng)頁(yè)一樣重要。如果搜索引擎抓取的網(wǎng)頁(yè)大部分都是比較重要的網(wǎng)頁(yè),就可以說(shuō)明他們在抓取網(wǎng)頁(yè)的重要性方面做得很好。你在這方面做得越好,搜索引擎就會(huì )越準確。
通過(guò)以上三個(gè)標準的分析,爬蟲(chóng)開(kāi)發(fā)的目標可以簡(jiǎn)單描述為:在資源有限的情況下,由于搜索引擎只能爬取互聯(lián)網(wǎng)上現有網(wǎng)頁(yè)的一部分,所以更重要的部分應盡可能選擇。要索引的頁(yè)面;對于已經(jīng)爬取的頁(yè)面,盡快更新內容,使被索引頁(yè)面的內容與互聯(lián)網(wǎng)上對應頁(yè)面的內容同步更新;網(wǎng)頁(yè)。三個(gè)“盡可能”基本明確了爬蟲(chóng)系統提升用戶(hù)體驗的目標。
為了滿(mǎn)足這三個(gè)質(zhì)量標準,大型商業(yè)搜索引擎開(kāi)發(fā)了多套針對性強的爬蟲(chóng)系統。以谷歌為例,至少有兩種不同的爬蟲(chóng)系統,一種叫做Fresh Bot,主要考慮網(wǎng)頁(yè)的新鮮度。對于內容更新頻繁的網(wǎng)頁(yè),目前更新周期可以達到秒級;另一組稱(chēng)為 Deep Crawl Bot,主要針對更新不頻繁、更新周期為幾天的網(wǎng)頁(yè)抓取。此外,谷歌在開(kāi)發(fā)暗網(wǎng)爬蟲(chóng)系統方面也投入了大量精力。以后有時(shí)間講解暗網(wǎng)系統。
谷歌的兩個(gè)爬蟲(chóng)系統
如果你對爬蟲(chóng)感興趣,還可以閱讀:
干貨全流程| 解密爬蟲(chóng)爬取更新網(wǎng)頁(yè)的策略方法
網(wǎng)絡(luò )爬蟲(chóng) | 你不知道的暗網(wǎng)是怎么爬的?
網(wǎng)絡(luò )爬蟲(chóng) | 你知道分布式爬蟲(chóng)是如何工作的嗎?
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(剛剛開(kāi)始python3簡(jiǎn)單的爬蟲(chóng),爬蟲(chóng)一下貼吧的圖片吧。)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2022-02-23 23:21
我也是剛開(kāi)始學(xué)python爬蟲(chóng)技術(shù),后來(lái)想在網(wǎng)上找一些教程看看。誰(shuí)知道,一搜,大部分都是用python2寫(xiě)的。新手一般喜歡安裝新版本。于是我也寫(xiě)了一個(gè)簡(jiǎn)單的python3爬蟲(chóng),爬取貼吧的圖片。事不宜遲,讓我們開(kāi)始吧。
首先,讓我們談?wù)勚R。
一、什么是爬蟲(chóng)?
采集網(wǎng)頁(yè)上的數據
二、學(xué)習爬蟲(chóng)的作用是什么?
做案例研究,做數據分析,分析網(wǎng)頁(yè)結構......
三、爬蟲(chóng)環(huán)境
要求:python3x pycharm
模塊:urllib、urllib2、bs4、re
四、爬蟲(chóng)思路:
1. 打開(kāi)網(wǎng)頁(yè)并獲取源代碼。
*由于多人同時(shí)爬取某個(gè)網(wǎng)站,會(huì )造成數據冗余和網(wǎng)站崩潰,所以部分網(wǎng)站被禁止爬取,會(huì )返回403 access denied錯誤信息。----獲取不到想要的內容/請求失敗/IP容易被封....等
*解決方案:偽裝 - 不要告訴 網(wǎng)站 我是一個(gè)腳本,告訴它我是一個(gè)瀏覽器。(添加任意瀏覽器的頭信息,偽裝成瀏覽器),既然是簡(jiǎn)單的例子,那我們就不搞這些刁鉆的操作了。
2. 獲取圖片
*查找功能:只查找第一個(gè)目標,查詢(xún)一次
*Find_all 功能:查找所有相同的對象。
這里的解析器可能有問(wèn)題,我們就不多說(shuō)了。有問(wèn)題的學(xué)生有一堆解決方案。
3. 保存圖片地址并下載圖片
*一種。使用urllib---urlretrieve下載(保存位置:如果和*.py文件保存在同一個(gè)地方,那么只需要文件夾名,如果在別處,那么一定要寫(xiě)絕對路徑。)
算了,廢話(huà)不多說(shuō),既然是簡(jiǎn)單的例子,那我就直接貼代碼了。相信沒(méi)有多少人不明白。
有一件事要提:您可以在沒(méi)有??偷那闆r下使用 BeautifulSoup;爬蟲(chóng)使用正則、Bs4 和 xpath。只需選擇三個(gè)中的一個(gè)。當然,它也可以組合使用,以及其他類(lèi)型。
爬取地址:
百度貼吧的壁紙圖片。
代碼顯示如下:
import urllib.request
import re
import os
import urllib
#!/usr/bin/python3
import re
import os
import urllib.request
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg) #轉換成一個(gè)正則對象
imglist = imgre.findall(html) #表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
print("====圖片的地址=====",imglist)
x = 0 #聲明一個(gè)變量賦值
path = r'H:/python lianxi/zout_pc5/test' #設置保存地址
if not os.path.isdir(path):
os.makedirs(path) # 將圖片保存到文件夾,沒(méi)有則創(chuàng )建
paths = path+'/'
print(paths)
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist,下載圖片保存在本地,
x = x + 1
print('圖片已開(kāi)始下載,注意查看文件夾')
return imglist
html = getHtml("http://tieba.baidu.com/p/3840085725") #獲取該網(wǎng)址網(wǎng)頁(yè)的源代碼
print(getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
最終效果如下:
好了,教程到此結束。
參考地址:
?。╬s:我也是python新手,文章如有錯誤請多多包涵) 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(剛剛開(kāi)始python3簡(jiǎn)單的爬蟲(chóng),爬蟲(chóng)一下貼吧的圖片吧。)
我也是剛開(kāi)始學(xué)python爬蟲(chóng)技術(shù),后來(lái)想在網(wǎng)上找一些教程看看。誰(shuí)知道,一搜,大部分都是用python2寫(xiě)的。新手一般喜歡安裝新版本。于是我也寫(xiě)了一個(gè)簡(jiǎn)單的python3爬蟲(chóng),爬取貼吧的圖片。事不宜遲,讓我們開(kāi)始吧。
首先,讓我們談?wù)勚R。
一、什么是爬蟲(chóng)?
采集網(wǎng)頁(yè)上的數據
二、學(xué)習爬蟲(chóng)的作用是什么?
做案例研究,做數據分析,分析網(wǎng)頁(yè)結構......
三、爬蟲(chóng)環(huán)境
要求:python3x pycharm
模塊:urllib、urllib2、bs4、re
四、爬蟲(chóng)思路:
1. 打開(kāi)網(wǎng)頁(yè)并獲取源代碼。
*由于多人同時(shí)爬取某個(gè)網(wǎng)站,會(huì )造成數據冗余和網(wǎng)站崩潰,所以部分網(wǎng)站被禁止爬取,會(huì )返回403 access denied錯誤信息。----獲取不到想要的內容/請求失敗/IP容易被封....等
*解決方案:偽裝 - 不要告訴 網(wǎng)站 我是一個(gè)腳本,告訴它我是一個(gè)瀏覽器。(添加任意瀏覽器的頭信息,偽裝成瀏覽器),既然是簡(jiǎn)單的例子,那我們就不搞這些刁鉆的操作了。
2. 獲取圖片
*查找功能:只查找第一個(gè)目標,查詢(xún)一次
*Find_all 功能:查找所有相同的對象。
這里的解析器可能有問(wèn)題,我們就不多說(shuō)了。有問(wèn)題的學(xué)生有一堆解決方案。
3. 保存圖片地址并下載圖片
*一種。使用urllib---urlretrieve下載(保存位置:如果和*.py文件保存在同一個(gè)地方,那么只需要文件夾名,如果在別處,那么一定要寫(xiě)絕對路徑。)
算了,廢話(huà)不多說(shuō),既然是簡(jiǎn)單的例子,那我就直接貼代碼了。相信沒(méi)有多少人不明白。
有一件事要提:您可以在沒(méi)有??偷那闆r下使用 BeautifulSoup;爬蟲(chóng)使用正則、Bs4 和 xpath。只需選擇三個(gè)中的一個(gè)。當然,它也可以組合使用,以及其他類(lèi)型。
爬取地址:
百度貼吧的壁紙圖片。
代碼顯示如下:
import urllib.request
import re
import os
import urllib
#!/usr/bin/python3
import re
import os
import urllib.request
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg) #轉換成一個(gè)正則對象
imglist = imgre.findall(html) #表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
print("====圖片的地址=====",imglist)
x = 0 #聲明一個(gè)變量賦值
path = r'H:/python lianxi/zout_pc5/test' #設置保存地址
if not os.path.isdir(path):
os.makedirs(path) # 將圖片保存到文件夾,沒(méi)有則創(chuàng )建
paths = path+'/'
print(paths)
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist,下載圖片保存在本地,
x = x + 1
print('圖片已開(kāi)始下載,注意查看文件夾')
return imglist
html = getHtml("http://tieba.baidu.com/p/3840085725") #獲取該網(wǎng)址網(wǎng)頁(yè)的源代碼
print(getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
最終效果如下:

好了,教程到此結束。
參考地址:
?。╬s:我也是python新手,文章如有錯誤請多多包涵)
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(潤森什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2022-02-23 19:12
)
大家好,我是潤森
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站通過(guò)Robots Protocol,告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 系統附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的基本術(shù)語(yǔ),指的是用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
"
那么圖片需要在哪里呢?
?
圖片保存在云服務(wù)器的數據庫中
"
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requestsr = requests.get('http://pic37.nipic.com/2014011 ... %2339;)with open('demo.jpg','wb+') as f:f.write(r.content)
?
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
"
先了解json
?
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
"
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{ “name”: “毛利”, “age”: 18, “ feature “ : [‘高’, ‘富’, ‘帥’]}
Python字典
{ ‘name’: ‘毛利’, ‘a(chǎn)ge’: 18 ‘feature’ : [‘高’, ‘富’, ‘帥’]}
?
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
"
在python中導入json,傳遞json.loads(s) --> 將json數據轉換成python數據(字典)
ajax的使用
?
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
"
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
分析圖片url鏈接的位置
同時(shí)找到ajax請求對應的url
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requestsimport jsonheaders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}r = requests.get('https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=',headers = headers).textres = json.loads(r)['data']for index,i in enumerate(res): url = i['hoverURL'] print(url) with open( '{}.jpg'.format(index),'wb+') as f: f.write(requests.get(url).content)
?
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
"
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&1561022599355=https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-# time :2019/6/20 17:07# author: 毛利import requestsimport jsonimport osdef get_pic_url(num): pic_url= [] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'} for i in range(num): page_url = 'https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&1561022599290='.format(30*i) r = requests.get(page_url, headers=headers).text res = json.loads(r)['data'] if res: print(res) for j in res: try: url = j['hoverURL'] pic_url.append(url) except: print('該圖片的url不存在') print(len(pic_url)) return pic_urldef down_img(num): pic_url =get_pic_url(num) if os.path.exists('D:圖片'): pass else: os.makedirs('D:圖片') path = 'D:圖片' for index,i in enumerate(pic_url): filename = path + str(index) + '.jpg' print(filename) with open(filename, 'wb+') as f: f.write(requests.get(i).content)if __name__ == '__main__': num = int(input('爬取幾次圖片:一次30張')) down_img(num)
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(潤森什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛)
)
大家好,我是潤森
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站通過(guò)Robots Protocol,告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 系統附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?

從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的基本術(shù)語(yǔ),指的是用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
"
那么圖片需要在哪里呢?
?
圖片保存在云服務(wù)器的數據庫中
"
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requestsr = requests.get('http://pic37.nipic.com/2014011 ... %2339;)with open('demo.jpg','wb+') as f:f.write(r.content)
?
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
"
先了解json
?
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
"
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{ “name”: “毛利”, “age”: 18, “ feature “ : [‘高’, ‘富’, ‘帥’]}
Python字典
{ ‘name’: ‘毛利’, ‘a(chǎn)ge’: 18 ‘feature’ : [‘高’, ‘富’, ‘帥’]}
?
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
"
在python中導入json,傳遞json.loads(s) --> 將json數據轉換成python數據(字典)
ajax的使用
?
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
"
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,

分析圖片url鏈接的位置

同時(shí)找到ajax請求對應的url

構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requestsimport jsonheaders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}r = requests.get('https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=',headers = headers).textres = json.loads(r)['data']for index,i in enumerate(res): url = i['hoverURL'] print(url) with open( '{}.jpg'.format(index),'wb+') as f: f.write(requests.get(url).content)

?
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
"
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&1561022599355=https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化

最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-# time :2019/6/20 17:07# author: 毛利import requestsimport jsonimport osdef get_pic_url(num): pic_url= [] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'} for i in range(num): page_url = 'https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&1561022599290='.format(30*i) r = requests.get(page_url, headers=headers).text res = json.loads(r)['data'] if res: print(res) for j in res: try: url = j['hoverURL'] pic_url.append(url) except: print('該圖片的url不存在') print(len(pic_url)) return pic_urldef down_img(num): pic_url =get_pic_url(num) if os.path.exists('D:圖片'): pass else: os.makedirs('D:圖片') path = 'D:圖片' for index,i in enumerate(pic_url): filename = path + str(index) + '.jpg' print(filename) with open(filename, 'wb+') as f: f.write(requests.get(i).content)if __name__ == '__main__': num = int(input('爬取幾次圖片:一次30張')) down_img(num)


網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)抓取量其實(shí)簡(jiǎn)單就是百度對站點(diǎn)一天網(wǎng)頁(yè)的數量)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 110 次瀏覽 ? 2022-02-23 05:10
影響百度爬蟲(chóng)網(wǎng)站爬取量的因素有哪些?百度爬蟲(chóng)的爬取量實(shí)際上是百度爬蟲(chóng)在一天內爬取一個(gè)網(wǎng)站的頁(yè)面數。在這里,新網(wǎng)小編就為大家介紹一下影響百度爬蟲(chóng)網(wǎng)站爬取量的因素。
其中之一就是本站生成新的網(wǎng)頁(yè),對于中小型網(wǎng)站可以在同一天完成。大的 網(wǎng)站 可能無(wú)法完成它們。百度收錄有5W,那么百度會(huì )給一個(gè)時(shí)間段,比如30天,然后平均出來(lái),每天去這個(gè)網(wǎng)站搶5W/30這樣一個(gè)數字,但是具體金額,百度有自己的一套算法公式可以計算。
影響百度抓取量的因素。
1.網(wǎng)站安全
對于中小型網(wǎng)站來(lái)說(shuō),安全技術(shù)比較薄弱,被黑客篡改的現象非常普遍。通常,有幾種常見(jiàn)的被黑客入侵的情況。一是主域被黑,二是標題被篡改,二是頁(yè)面有很多外部鏈接。一般主域被黑了就是劫持了,就是主域被301重定向到指定的網(wǎng)站,如果你在百度上跳轉后發(fā)現一些垃圾站,那么你的站點(diǎn)就搶量里面會(huì )減少。
2.內容質(zhì)量
如果爬取了10萬(wàn)個(gè)頁(yè)面,只創(chuàng )建了100個(gè),爬取量就會(huì )下降,因為百度會(huì )認為爬取的頁(yè)面比例很低,所以沒(méi)必要多爬取,所以“最好是短于浪費”,尤其是在建網(wǎng)站的時(shí)候,一定要注意質(zhì)量,不要采集一些內容,這是一個(gè)潛在的隱患。
3.網(wǎng)站響應能力
?、?網(wǎng)頁(yè)大小會(huì )影響爬取。百度推薦網(wǎng)頁(yè)大小在1M以?xún)?。當然,它?lèi)似于新浪所說(shuō)的大型門(mén)戶(hù)網(wǎng)站。
?、诖a質(zhì)量、機器性能和帶寬,這個(gè)不多說(shuō),后面作者會(huì )單獨拿出文章解釋?zhuān)垖?shí)時(shí)關(guān)注“營(yíng)銷(xiāo)專(zhuān)家”。
4.同一ip上的主域數
百度爬取是基于ip的。比如一個(gè)ip每天爬1000w個(gè)頁(yè)面,這個(gè)站點(diǎn)有40W個(gè)站點(diǎn),那么平均每個(gè)站點(diǎn)的爬取次數會(huì )很分散。很少。
相信大家都知道哪些因素會(huì )影響百度爬蟲(chóng)對網(wǎng)站的抓取量。提醒大家,在選擇服務(wù)商的時(shí)候,要檢查一下同一個(gè)ip上是否有大網(wǎng)站。如果有大站點(diǎn)的話(huà),可能分配的爬取量會(huì )很小,因為流量會(huì )流向大站點(diǎn)。
_創(chuàng )新互聯(lián),為您提供面包屑導航、網(wǎng)站導航、網(wǎng)站策劃、搜索引擎優(yōu)化、網(wǎng)站、網(wǎng)站制作 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)抓取量其實(shí)簡(jiǎn)單就是百度對站點(diǎn)一天網(wǎng)頁(yè)的數量)
影響百度爬蟲(chóng)網(wǎng)站爬取量的因素有哪些?百度爬蟲(chóng)的爬取量實(shí)際上是百度爬蟲(chóng)在一天內爬取一個(gè)網(wǎng)站的頁(yè)面數。在這里,新網(wǎng)小編就為大家介紹一下影響百度爬蟲(chóng)網(wǎng)站爬取量的因素。
其中之一就是本站生成新的網(wǎng)頁(yè),對于中小型網(wǎng)站可以在同一天完成。大的 網(wǎng)站 可能無(wú)法完成它們。百度收錄有5W,那么百度會(huì )給一個(gè)時(shí)間段,比如30天,然后平均出來(lái),每天去這個(gè)網(wǎng)站搶5W/30這樣一個(gè)數字,但是具體金額,百度有自己的一套算法公式可以計算。
影響百度抓取量的因素。
1.網(wǎng)站安全
對于中小型網(wǎng)站來(lái)說(shuō),安全技術(shù)比較薄弱,被黑客篡改的現象非常普遍。通常,有幾種常見(jiàn)的被黑客入侵的情況。一是主域被黑,二是標題被篡改,二是頁(yè)面有很多外部鏈接。一般主域被黑了就是劫持了,就是主域被301重定向到指定的網(wǎng)站,如果你在百度上跳轉后發(fā)現一些垃圾站,那么你的站點(diǎn)就搶量里面會(huì )減少。
2.內容質(zhì)量
如果爬取了10萬(wàn)個(gè)頁(yè)面,只創(chuàng )建了100個(gè),爬取量就會(huì )下降,因為百度會(huì )認為爬取的頁(yè)面比例很低,所以沒(méi)必要多爬取,所以“最好是短于浪費”,尤其是在建網(wǎng)站的時(shí)候,一定要注意質(zhì)量,不要采集一些內容,這是一個(gè)潛在的隱患。
3.網(wǎng)站響應能力
?、?網(wǎng)頁(yè)大小會(huì )影響爬取。百度推薦網(wǎng)頁(yè)大小在1M以?xún)?。當然,它?lèi)似于新浪所說(shuō)的大型門(mén)戶(hù)網(wǎng)站。
?、诖a質(zhì)量、機器性能和帶寬,這個(gè)不多說(shuō),后面作者會(huì )單獨拿出文章解釋?zhuān)垖?shí)時(shí)關(guān)注“營(yíng)銷(xiāo)專(zhuān)家”。
4.同一ip上的主域數
百度爬取是基于ip的。比如一個(gè)ip每天爬1000w個(gè)頁(yè)面,這個(gè)站點(diǎn)有40W個(gè)站點(diǎn),那么平均每個(gè)站點(diǎn)的爬取次數會(huì )很分散。很少。
相信大家都知道哪些因素會(huì )影響百度爬蟲(chóng)對網(wǎng)站的抓取量。提醒大家,在選擇服務(wù)商的時(shí)候,要檢查一下同一個(gè)ip上是否有大網(wǎng)站。如果有大站點(diǎn)的話(huà),可能分配的爬取量會(huì )很小,因為流量會(huì )流向大站點(diǎn)。
_創(chuàng )新互聯(lián),為您提供面包屑導航、網(wǎng)站導航、網(wǎng)站策劃、搜索引擎優(yōu)化、網(wǎng)站、網(wǎng)站制作
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么使用爬蟲(chóng)為什么我們需要使用千磨風(fēng)?(上))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 444 次瀏覽 ? 2022-02-22 15:11
關(guān)鍵詞:爬蟲(chóng)簡(jiǎn)介
千辛萬(wàn)苦,千錘百煉,任爾南北風(fēng),東風(fēng)西風(fēng)。本期文章主要講第55天:爬蟲(chóng)相關(guān)知識介紹,希望對大家有所幫助。
由先歡
作為程序員,相信大家對“爬蟲(chóng)”這個(gè)詞并不陌生。人們經(jīng)常在周?chē)岬竭@個(gè)詞。在不知道的人眼里,他們會(huì )認為這項技術(shù)非常高端和神秘。別著(zhù)急,我們的爬蟲(chóng)系列就帶你揭開(kāi)它的神秘面紗,探尋它的真面目。
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛或網(wǎng)絡(luò )機器人)是一種程序或腳本,它根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上的信息。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
通俗地說(shuō),我們把互聯(lián)網(wǎng)比作一個(gè)大蜘蛛網(wǎng),每個(gè)站點(diǎn)資源都比作蜘蛛網(wǎng)上的一個(gè)節點(diǎn)。爬蟲(chóng)就像一只蜘蛛,按照設計好的路線(xiàn)和規則在這張蜘蛛網(wǎng)上尋找目標節點(diǎn)。,獲取資源。
為什么要使用爬蟲(chóng)
為什么我們需要使用爬蟲(chóng)?
你可以想象一個(gè)場(chǎng)景:你很崇拜一個(gè)微博名人,你對他的微博很著(zhù)迷,你想把他微博上十年的每一句話(huà)都提取出來(lái),做成名人語(yǔ)錄。你在這個(gè)時(shí)候做什么?手動(dòng)轉到 Ctrl+C 和 Ctrl+V?這種方法確實(shí)是正確的。數據量少的時(shí)候我們可以這樣做,但是數據量上千的時(shí)候還需要這樣做嗎?
再想象一個(gè)場(chǎng)景:你想做一個(gè)新聞聚合網(wǎng)站,你需要每天定時(shí)去幾條新聞網(wǎng)站獲取最新消息,我們稱(chēng)之為RSS訂閱。你定期去每個(gè)訂閱網(wǎng)站復制新聞嗎?恐怕個(gè)人很難做到這一點(diǎn)。
在以上兩種場(chǎng)景下,使用爬蟲(chóng)技術(shù)可以輕松解決問(wèn)題。因此,我們可以看到爬蟲(chóng)技術(shù)主要可以幫我們做兩種事情:一是數據獲取需求,主要是針對特定規則下的大量數據的獲??;另一個(gè)是自動(dòng)化需求,主要用于類(lèi)似信息的聚合、搜索等。
爬行動(dòng)物的分類(lèi)
從爬取對象的角度,爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
通用網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為Scalable Web Crawler,將爬取對象從一些種子URL擴展到整個(gè)Web,主要針對搜索引擎和大型Web服務(wù)商采集數據。此類(lèi)網(wǎng)絡(luò )爬蟲(chóng)的爬取范圍和數量巨大,對爬取速度和存儲空間的要求比較高,對爬取頁(yè)面的順序要求比較低。比如我們常見(jiàn)的百度和谷歌搜索。我們進(jìn)入關(guān)鍵詞,他們會(huì )從全網(wǎng)找到關(guān)鍵詞相關(guān)的網(wǎng)頁(yè),并按照一定的順序呈現給我們。
Focused Crawler 是指有選擇地抓取與??預定義主題相關(guān)的頁(yè)面的網(wǎng)絡(luò )爬蟲(chóng)。與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,聚焦爬蟲(chóng)只需要爬取特定的網(wǎng)頁(yè),爬取的廣度會(huì )小很多。比如我們需要爬取東方財富網(wǎng)的基金數據,只需要制定規則爬取東方財富網(wǎng)的頁(yè)面即可。
通俗的說(shuō),萬(wàn)能爬蟲(chóng)類(lèi)似于蜘蛛,需要尋找特定的食物,但是它不知道蜘蛛網(wǎng)的哪個(gè)節點(diǎn)有它,所以只能從一個(gè)節點(diǎn)開(kāi)始,到時(shí)候再看這個(gè)節點(diǎn)遇到它,如果有食物就拿食物,如果這個(gè)節點(diǎn)表示某個(gè)節點(diǎn)有食物,那么它會(huì )按照指示尋找下一個(gè)節點(diǎn)。網(wǎng)絡(luò )爬蟲(chóng)的重點(diǎn)是蜘蛛知道哪個(gè)節點(diǎn)有食物,它只需要規劃一條路線(xiàn)到達那個(gè)節點(diǎn)就可以得到食物。
瀏覽網(wǎng)頁(yè)的過(guò)程
在用戶(hù)瀏覽網(wǎng)頁(yè)的過(guò)程中,我們可能會(huì )看到很多漂亮的圖片,比如我們會(huì )看到幾張圖片和百度搜索框,類(lèi)似下圖:
這個(gè)過(guò)程其實(shí)就是用戶(hù)輸入URL后,經(jīng)過(guò)DNS服務(wù)器,找到服務(wù)器主機,向服務(wù)器發(fā)送請求。服務(wù)器解析后,將html、js、css等文件發(fā)送到用戶(hù)的瀏覽器。瀏覽器解析后,用戶(hù)可以看到各種圖片。
因此,用戶(hù)看到的網(wǎng)頁(yè)本質(zhì)上是由 HTML 代碼組成的,爬蟲(chóng)爬取這些內容。通過(guò)對這些HTML代碼進(jìn)行分析和過(guò)濾,實(shí)現圖片、文字等資源的獲取。
網(wǎng)址的含義
URL,即Uniform Resource Locator,也就是我們所說(shuō)的網(wǎng)站,Uniform Resource Locator是對可以從互聯(lián)網(wǎng)上獲取的資源的位置和訪(fǎng)問(wèn)方式的簡(jiǎn)明表示,是互聯(lián)網(wǎng)上標準資源的地址. Internet 上的每個(gè)文件都有一個(gè)唯一的 URL,其中收錄指示文件位置以及瀏覽器應該如何處理它的信息。
URL的格式由三部分組成:
由于爬蟲(chóng)的目標是獲取資源,而資源存儲在某個(gè)主機上,所以爬蟲(chóng)在爬取數據時(shí)必須有一個(gè)目標URL來(lái)獲取數據。因此,它是爬蟲(chóng)獲取數據的基本依據。準確理解它的含義,對于爬蟲(chóng)的學(xué)習很有幫助。
爬蟲(chóng)的過(guò)程
我們下一章主要討論焦點(diǎn)爬蟲(chóng)。焦點(diǎn)爬蟲(chóng)的工作流程如下:
從這個(gè)爬蟲(chóng)的過(guò)程中,你應該可以想到學(xué)習爬蟲(chóng)需要學(xué)習的關(guān)鍵步驟。首先,我們需要像瀏覽器一樣請求一個(gè)URL來(lái)獲取主機的資源,所以正確請求和獲取內容的方法是我們研究的重點(diǎn)。我們獲取資源后(即請求URL后得到的響應內容),需要解析響應內容,為我們獲取有價(jià)值的數據。這里的分析方法是學(xué)習的重點(diǎn)。我們拿到數據后,接下來(lái)需要存儲數據,數據的存儲方式也很重要。
因此,我們所學(xué)的爬蟲(chóng)技術(shù)其實(shí)可以概括為三個(gè)基本問(wèn)題:請求、解析和存儲。如果掌握了這三個(gè)問(wèn)題的相應解決方案,爬蟲(chóng)技術(shù)就掌握了。在學(xué)習爬蟲(chóng)的過(guò)程中,大家都會(huì )關(guān)注這三個(gè)問(wèn)題,不會(huì )走彎路。
總結
本節介紹爬蟲(chóng)的基本概念,以便您對爬蟲(chóng)有一個(gè)大致的了解,以便在后續章節中學(xué)習。開(kāi)胃菜吃完了,下一節就要開(kāi)始饕餮盛宴了,你準備好了嗎?
文中示例代碼: 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么使用爬蟲(chóng)為什么我們需要使用千磨風(fēng)?(上))
關(guān)鍵詞:爬蟲(chóng)簡(jiǎn)介
千辛萬(wàn)苦,千錘百煉,任爾南北風(fēng),東風(fēng)西風(fēng)。本期文章主要講第55天:爬蟲(chóng)相關(guān)知識介紹,希望對大家有所幫助。
由先歡
作為程序員,相信大家對“爬蟲(chóng)”這個(gè)詞并不陌生。人們經(jīng)常在周?chē)岬竭@個(gè)詞。在不知道的人眼里,他們會(huì )認為這項技術(shù)非常高端和神秘。別著(zhù)急,我們的爬蟲(chóng)系列就帶你揭開(kāi)它的神秘面紗,探尋它的真面目。
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛或網(wǎng)絡(luò )機器人)是一種程序或腳本,它根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上的信息。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
通俗地說(shuō),我們把互聯(lián)網(wǎng)比作一個(gè)大蜘蛛網(wǎng),每個(gè)站點(diǎn)資源都比作蜘蛛網(wǎng)上的一個(gè)節點(diǎn)。爬蟲(chóng)就像一只蜘蛛,按照設計好的路線(xiàn)和規則在這張蜘蛛網(wǎng)上尋找目標節點(diǎn)。,獲取資源。
為什么要使用爬蟲(chóng)
為什么我們需要使用爬蟲(chóng)?
你可以想象一個(gè)場(chǎng)景:你很崇拜一個(gè)微博名人,你對他的微博很著(zhù)迷,你想把他微博上十年的每一句話(huà)都提取出來(lái),做成名人語(yǔ)錄。你在這個(gè)時(shí)候做什么?手動(dòng)轉到 Ctrl+C 和 Ctrl+V?這種方法確實(shí)是正確的。數據量少的時(shí)候我們可以這樣做,但是數據量上千的時(shí)候還需要這樣做嗎?
再想象一個(gè)場(chǎng)景:你想做一個(gè)新聞聚合網(wǎng)站,你需要每天定時(shí)去幾條新聞網(wǎng)站獲取最新消息,我們稱(chēng)之為RSS訂閱。你定期去每個(gè)訂閱網(wǎng)站復制新聞嗎?恐怕個(gè)人很難做到這一點(diǎn)。
在以上兩種場(chǎng)景下,使用爬蟲(chóng)技術(shù)可以輕松解決問(wèn)題。因此,我們可以看到爬蟲(chóng)技術(shù)主要可以幫我們做兩種事情:一是數據獲取需求,主要是針對特定規則下的大量數據的獲??;另一個(gè)是自動(dòng)化需求,主要用于類(lèi)似信息的聚合、搜索等。
爬行動(dòng)物的分類(lèi)
從爬取對象的角度,爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
通用網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為Scalable Web Crawler,將爬取對象從一些種子URL擴展到整個(gè)Web,主要針對搜索引擎和大型Web服務(wù)商采集數據。此類(lèi)網(wǎng)絡(luò )爬蟲(chóng)的爬取范圍和數量巨大,對爬取速度和存儲空間的要求比較高,對爬取頁(yè)面的順序要求比較低。比如我們常見(jiàn)的百度和谷歌搜索。我們進(jìn)入關(guān)鍵詞,他們會(huì )從全網(wǎng)找到關(guān)鍵詞相關(guān)的網(wǎng)頁(yè),并按照一定的順序呈現給我們。
Focused Crawler 是指有選擇地抓取與??預定義主題相關(guān)的頁(yè)面的網(wǎng)絡(luò )爬蟲(chóng)。與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,聚焦爬蟲(chóng)只需要爬取特定的網(wǎng)頁(yè),爬取的廣度會(huì )小很多。比如我們需要爬取東方財富網(wǎng)的基金數據,只需要制定規則爬取東方財富網(wǎng)的頁(yè)面即可。
通俗的說(shuō),萬(wàn)能爬蟲(chóng)類(lèi)似于蜘蛛,需要尋找特定的食物,但是它不知道蜘蛛網(wǎng)的哪個(gè)節點(diǎn)有它,所以只能從一個(gè)節點(diǎn)開(kāi)始,到時(shí)候再看這個(gè)節點(diǎn)遇到它,如果有食物就拿食物,如果這個(gè)節點(diǎn)表示某個(gè)節點(diǎn)有食物,那么它會(huì )按照指示尋找下一個(gè)節點(diǎn)。網(wǎng)絡(luò )爬蟲(chóng)的重點(diǎn)是蜘蛛知道哪個(gè)節點(diǎn)有食物,它只需要規劃一條路線(xiàn)到達那個(gè)節點(diǎn)就可以得到食物。
瀏覽網(wǎng)頁(yè)的過(guò)程
在用戶(hù)瀏覽網(wǎng)頁(yè)的過(guò)程中,我們可能會(huì )看到很多漂亮的圖片,比如我們會(huì )看到幾張圖片和百度搜索框,類(lèi)似下圖:

這個(gè)過(guò)程其實(shí)就是用戶(hù)輸入URL后,經(jīng)過(guò)DNS服務(wù)器,找到服務(wù)器主機,向服務(wù)器發(fā)送請求。服務(wù)器解析后,將html、js、css等文件發(fā)送到用戶(hù)的瀏覽器。瀏覽器解析后,用戶(hù)可以看到各種圖片。
因此,用戶(hù)看到的網(wǎng)頁(yè)本質(zhì)上是由 HTML 代碼組成的,爬蟲(chóng)爬取這些內容。通過(guò)對這些HTML代碼進(jìn)行分析和過(guò)濾,實(shí)現圖片、文字等資源的獲取。
網(wǎng)址的含義
URL,即Uniform Resource Locator,也就是我們所說(shuō)的網(wǎng)站,Uniform Resource Locator是對可以從互聯(lián)網(wǎng)上獲取的資源的位置和訪(fǎng)問(wèn)方式的簡(jiǎn)明表示,是互聯(lián)網(wǎng)上標準資源的地址. Internet 上的每個(gè)文件都有一個(gè)唯一的 URL,其中收錄指示文件位置以及瀏覽器應該如何處理它的信息。
URL的格式由三部分組成:
由于爬蟲(chóng)的目標是獲取資源,而資源存儲在某個(gè)主機上,所以爬蟲(chóng)在爬取數據時(shí)必須有一個(gè)目標URL來(lái)獲取數據。因此,它是爬蟲(chóng)獲取數據的基本依據。準確理解它的含義,對于爬蟲(chóng)的學(xué)習很有幫助。
爬蟲(chóng)的過(guò)程
我們下一章主要討論焦點(diǎn)爬蟲(chóng)。焦點(diǎn)爬蟲(chóng)的工作流程如下:

從這個(gè)爬蟲(chóng)的過(guò)程中,你應該可以想到學(xué)習爬蟲(chóng)需要學(xué)習的關(guān)鍵步驟。首先,我們需要像瀏覽器一樣請求一個(gè)URL來(lái)獲取主機的資源,所以正確請求和獲取內容的方法是我們研究的重點(diǎn)。我們獲取資源后(即請求URL后得到的響應內容),需要解析響應內容,為我們獲取有價(jià)值的數據。這里的分析方法是學(xué)習的重點(diǎn)。我們拿到數據后,接下來(lái)需要存儲數據,數據的存儲方式也很重要。
因此,我們所學(xué)的爬蟲(chóng)技術(shù)其實(shí)可以概括為三個(gè)基本問(wèn)題:請求、解析和存儲。如果掌握了這三個(gè)問(wèn)題的相應解決方案,爬蟲(chóng)技術(shù)就掌握了。在學(xué)習爬蟲(chóng)的過(guò)程中,大家都會(huì )關(guān)注這三個(gè)問(wèn)題,不會(huì )走彎路。
總結
本節介紹爬蟲(chóng)的基本概念,以便您對爬蟲(chóng)有一個(gè)大致的了解,以便在后續章節中學(xué)習。開(kāi)胃菜吃完了,下一節就要開(kāi)始饕餮盛宴了,你準備好了嗎?
文中示例代碼:
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一時(shí)間解決?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-02-22 15:07
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看
在當今社會(huì ),如何有效地提取和利用信息已成為一個(gè)巨大的挑戰?;谶@個(gè)巨大的市場(chǎng)需求,履帶技術(shù)應運而生,這也是為什么對履帶工程師的需求與日俱增的原因。那么Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握哪些核心技術(shù)呢?以小編推出的《Python網(wǎng)絡(luò )爬蟲(chóng)解析》課程為例,內容涉及Scrapy框架、分布式爬蟲(chóng)等核心技術(shù)。下面一起來(lái)看看Python網(wǎng)絡(luò )爬蟲(chóng)的具體學(xué)習內容吧!
Python網(wǎng)絡(luò )爬蟲(chóng)課程簡(jiǎn)介:
為了讓具備Python基礎的人適合工作需要,小編推出了全面、系統、簡(jiǎn)單的Python網(wǎng)絡(luò )爬蟲(chóng)入門(mén)課程,不僅講解了學(xué)習網(wǎng)絡(luò )爬蟲(chóng)必備的基礎知識,還增加了一個(gè)爬蟲(chóng)框架。學(xué)習完內容后,您將能夠全面掌握爬取和解析網(wǎng)頁(yè)的各種技術(shù),還可以掌握爬蟲(chóng)的一些擴展知識,如并發(fā)下載、識別圖片文本、抓取動(dòng)態(tài)內容等。并且每個(gè)人都可以掌握爬蟲(chóng)框架的使用,比如Scrapy,從而創(chuàng )建自己的網(wǎng)絡(luò )爬蟲(chóng)項目,勝任Python網(wǎng)絡(luò )爬蟲(chóng)工程師相關(guān)的工作。
Python網(wǎng)絡(luò )爬蟲(chóng)知識大綱:
第1部分
主要是帶領(lǐng)大家了解網(wǎng)絡(luò )爬蟲(chóng),包括爬蟲(chóng)的背景、什么是爬蟲(chóng)、爬蟲(chóng)的目的、爬蟲(chóng)的分類(lèi)等。
第2部分
主要講解爬蟲(chóng)的實(shí)現原理和技術(shù),包括爬蟲(chóng)的實(shí)現原理、爬取網(wǎng)頁(yè)的詳細過(guò)程、通用爬蟲(chóng)中網(wǎng)頁(yè)的分類(lèi)、通用爬蟲(chóng)相關(guān)的網(wǎng)站文件、反爬蟲(chóng)響應策略,以及為什么選擇 Python 爬蟲(chóng)等。希望讀者能夠了解爬蟲(chóng)是如何爬取網(wǎng)頁(yè)的,對爬取過(guò)程中出現的一些問(wèn)題有一定的了解,以后會(huì )針對這些問(wèn)題提供一些合理的解決方案。
第 3 部分
主要介紹網(wǎng)頁(yè)請求的原理,包括瀏覽網(wǎng)頁(yè)的過(guò)程、HTTP網(wǎng)絡(luò )請求的原理、HTTP抓包工具Fiddler。
第 4 部分
介紹了兩個(gè)用于抓取 Web 數據的庫:urllib 和 requests。首先介紹了urllib庫的基本使用,包括使用urllib傳輸數據,添加具體的header,設置代理服務(wù)器,超時(shí)設置,常見(jiàn)的網(wǎng)絡(luò )異常,然后介紹一個(gè)更加人性化的requests庫,結合百度< @貼吧的案例說(shuō)明了如何使用urllib庫爬取網(wǎng)頁(yè)數據。大家應該能熟練掌握這兩個(gè)庫的使用,反復使用多練習。另外,可以參考官網(wǎng)提供的文檔進(jìn)行深入研究。
第 5 部分
主要介紹了幾種解析網(wǎng)頁(yè)數據的技術(shù),包括正則表達式、XPath、Beautiful Soup和JSONPath,并講解了封裝這些技術(shù)的Python模塊或庫的基本使用,包括re模塊、lxml庫、bs4庫、json模塊、并結合騰訊社招網(wǎng)站的案例,分別講解如何使用re模塊、lxml庫和bs4庫來(lái)解析網(wǎng)頁(yè)數據,以便更好地區分這些技術(shù)之間的差異。在實(shí)際工作中,可以根據具體情況選擇合理的技術(shù)來(lái)使用。
第 6 部分
主要講解并發(fā)下載,包括多線(xiàn)程爬蟲(chóng)進(jìn)程分析,使用queue模塊實(shí)現多線(xiàn)程爬取,協(xié)程實(shí)現并發(fā)爬取。結合尷尬百科的案例,分別使用了單線(xiàn)程、多線(xiàn)程、協(xié)程三種技術(shù)。獲取網(wǎng)頁(yè)數據,分析三者的表現。
第 7 部分
介紹圍繞抓取動(dòng)態(tài)內容,包括動(dòng)態(tài)網(wǎng)頁(yè)介紹,selenium和PhantomJS概述,selenium和PhantomJS的安裝和配置,selenium和PhantomJS的基本使用,結合模擬豆瓣網(wǎng)站登陸的案例,在項目中解釋了項目如何應用 selenium 和 PhantomJS 技術(shù)。
第 8 部分
主要講解圖像識別和文字處理,包括Tesseract引擎、pytesseract和PIL庫的下載安裝、標準格式文本處理、驗證碼處理等,結合一個(gè)識別本地驗證碼圖片的小程序,講解如何使用 pytesseract 識別圖像中的驗證碼。
第 9 部分
主要介紹爬蟲(chóng)數據的存儲,包括數據存儲的介紹、MongoDB數據庫的介紹、使用PyMongo庫存儲在數據庫等,并結合豆瓣電影的案例講解如何抓取,從 網(wǎng)站 一步一步地解析和存儲電影信息。
第 10 部分
主要是對爬蟲(chóng)框架Scrapy的初步講解,包括常用爬蟲(chóng)框架介紹、Scrapy框架結構、運行流程、安裝、基本操作等。
第 11 部分
首先介紹Scrapy終端和核心組件。首先介紹了Scrapy終端的啟動(dòng)和使用,并用一個(gè)例子來(lái)鞏固。然后,詳細介紹了 Scrapy 框架的一些核心組件,包括 Spiders、Item Pipeline 和 Settings。最后結合斗魚(yú)App爬蟲(chóng)的案例,講解了如何使用。Scrapy 框架捕獲移動(dòng)應用程序的數據。
第 12 部分
繼續介紹自動(dòng)爬取網(wǎng)頁(yè)的爬蟲(chóng)CrawlSpider的知識,包括先了解爬蟲(chóng)類(lèi)CrawlSpider,CrawlSpider類(lèi)的工作原理,通過(guò)Rule類(lèi)確定爬取規則,通過(guò)LinkExtractor類(lèi)提取鏈接,以及開(kāi)發(fā)了一個(gè)CrawlSpider類(lèi)來(lái)爬取騰訊招聘網(wǎng)站的案例,并將這部分的知識點(diǎn)應用到案例中。
第 13 部分
圍繞Scrapy-Redis分布式爬蟲(chóng)進(jìn)行講解,包括完整的架構、運行流程、主要組件、Scrapy-Redis的基本使用、如何搭建Scrapy-Redis開(kāi)發(fā)環(huán)境等,并結合百度百科案例使用這些知識點(diǎn)。
以上就是成為Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握的核心技術(shù)。你想通了嗎?其實(shí),做一個(gè)網(wǎng)絡(luò )爬蟲(chóng)并不難。只要掌握科學(xué)的學(xué)習方法,將理論基礎與實(shí)踐經(jīng)驗相結合,就能快速掌握爬蟲(chóng)的核心技術(shù)。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一時(shí)間解決?(圖))
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看

在當今社會(huì ),如何有效地提取和利用信息已成為一個(gè)巨大的挑戰?;谶@個(gè)巨大的市場(chǎng)需求,履帶技術(shù)應運而生,這也是為什么對履帶工程師的需求與日俱增的原因。那么Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握哪些核心技術(shù)呢?以小編推出的《Python網(wǎng)絡(luò )爬蟲(chóng)解析》課程為例,內容涉及Scrapy框架、分布式爬蟲(chóng)等核心技術(shù)。下面一起來(lái)看看Python網(wǎng)絡(luò )爬蟲(chóng)的具體學(xué)習內容吧!
Python網(wǎng)絡(luò )爬蟲(chóng)課程簡(jiǎn)介:
為了讓具備Python基礎的人適合工作需要,小編推出了全面、系統、簡(jiǎn)單的Python網(wǎng)絡(luò )爬蟲(chóng)入門(mén)課程,不僅講解了學(xué)習網(wǎng)絡(luò )爬蟲(chóng)必備的基礎知識,還增加了一個(gè)爬蟲(chóng)框架。學(xué)習完內容后,您將能夠全面掌握爬取和解析網(wǎng)頁(yè)的各種技術(shù),還可以掌握爬蟲(chóng)的一些擴展知識,如并發(fā)下載、識別圖片文本、抓取動(dòng)態(tài)內容等。并且每個(gè)人都可以掌握爬蟲(chóng)框架的使用,比如Scrapy,從而創(chuàng )建自己的網(wǎng)絡(luò )爬蟲(chóng)項目,勝任Python網(wǎng)絡(luò )爬蟲(chóng)工程師相關(guān)的工作。
Python網(wǎng)絡(luò )爬蟲(chóng)知識大綱:
第1部分
主要是帶領(lǐng)大家了解網(wǎng)絡(luò )爬蟲(chóng),包括爬蟲(chóng)的背景、什么是爬蟲(chóng)、爬蟲(chóng)的目的、爬蟲(chóng)的分類(lèi)等。
第2部分
主要講解爬蟲(chóng)的實(shí)現原理和技術(shù),包括爬蟲(chóng)的實(shí)現原理、爬取網(wǎng)頁(yè)的詳細過(guò)程、通用爬蟲(chóng)中網(wǎng)頁(yè)的分類(lèi)、通用爬蟲(chóng)相關(guān)的網(wǎng)站文件、反爬蟲(chóng)響應策略,以及為什么選擇 Python 爬蟲(chóng)等。希望讀者能夠了解爬蟲(chóng)是如何爬取網(wǎng)頁(yè)的,對爬取過(guò)程中出現的一些問(wèn)題有一定的了解,以后會(huì )針對這些問(wèn)題提供一些合理的解決方案。
第 3 部分
主要介紹網(wǎng)頁(yè)請求的原理,包括瀏覽網(wǎng)頁(yè)的過(guò)程、HTTP網(wǎng)絡(luò )請求的原理、HTTP抓包工具Fiddler。
第 4 部分
介紹了兩個(gè)用于抓取 Web 數據的庫:urllib 和 requests。首先介紹了urllib庫的基本使用,包括使用urllib傳輸數據,添加具體的header,設置代理服務(wù)器,超時(shí)設置,常見(jiàn)的網(wǎng)絡(luò )異常,然后介紹一個(gè)更加人性化的requests庫,結合百度< @貼吧的案例說(shuō)明了如何使用urllib庫爬取網(wǎng)頁(yè)數據。大家應該能熟練掌握這兩個(gè)庫的使用,反復使用多練習。另外,可以參考官網(wǎng)提供的文檔進(jìn)行深入研究。
第 5 部分
主要介紹了幾種解析網(wǎng)頁(yè)數據的技術(shù),包括正則表達式、XPath、Beautiful Soup和JSONPath,并講解了封裝這些技術(shù)的Python模塊或庫的基本使用,包括re模塊、lxml庫、bs4庫、json模塊、并結合騰訊社招網(wǎng)站的案例,分別講解如何使用re模塊、lxml庫和bs4庫來(lái)解析網(wǎng)頁(yè)數據,以便更好地區分這些技術(shù)之間的差異。在實(shí)際工作中,可以根據具體情況選擇合理的技術(shù)來(lái)使用。
第 6 部分
主要講解并發(fā)下載,包括多線(xiàn)程爬蟲(chóng)進(jìn)程分析,使用queue模塊實(shí)現多線(xiàn)程爬取,協(xié)程實(shí)現并發(fā)爬取。結合尷尬百科的案例,分別使用了單線(xiàn)程、多線(xiàn)程、協(xié)程三種技術(shù)。獲取網(wǎng)頁(yè)數據,分析三者的表現。
第 7 部分
介紹圍繞抓取動(dòng)態(tài)內容,包括動(dòng)態(tài)網(wǎng)頁(yè)介紹,selenium和PhantomJS概述,selenium和PhantomJS的安裝和配置,selenium和PhantomJS的基本使用,結合模擬豆瓣網(wǎng)站登陸的案例,在項目中解釋了項目如何應用 selenium 和 PhantomJS 技術(shù)。
第 8 部分
主要講解圖像識別和文字處理,包括Tesseract引擎、pytesseract和PIL庫的下載安裝、標準格式文本處理、驗證碼處理等,結合一個(gè)識別本地驗證碼圖片的小程序,講解如何使用 pytesseract 識別圖像中的驗證碼。
第 9 部分
主要介紹爬蟲(chóng)數據的存儲,包括數據存儲的介紹、MongoDB數據庫的介紹、使用PyMongo庫存儲在數據庫等,并結合豆瓣電影的案例講解如何抓取,從 網(wǎng)站 一步一步地解析和存儲電影信息。
第 10 部分
主要是對爬蟲(chóng)框架Scrapy的初步講解,包括常用爬蟲(chóng)框架介紹、Scrapy框架結構、運行流程、安裝、基本操作等。
第 11 部分
首先介紹Scrapy終端和核心組件。首先介紹了Scrapy終端的啟動(dòng)和使用,并用一個(gè)例子來(lái)鞏固。然后,詳細介紹了 Scrapy 框架的一些核心組件,包括 Spiders、Item Pipeline 和 Settings。最后結合斗魚(yú)App爬蟲(chóng)的案例,講解了如何使用。Scrapy 框架捕獲移動(dòng)應用程序的數據。
第 12 部分
繼續介紹自動(dòng)爬取網(wǎng)頁(yè)的爬蟲(chóng)CrawlSpider的知識,包括先了解爬蟲(chóng)類(lèi)CrawlSpider,CrawlSpider類(lèi)的工作原理,通過(guò)Rule類(lèi)確定爬取規則,通過(guò)LinkExtractor類(lèi)提取鏈接,以及開(kāi)發(fā)了一個(gè)CrawlSpider類(lèi)來(lái)爬取騰訊招聘網(wǎng)站的案例,并將這部分的知識點(diǎn)應用到案例中。
第 13 部分
圍繞Scrapy-Redis分布式爬蟲(chóng)進(jìn)行講解,包括完整的架構、運行流程、主要組件、Scrapy-Redis的基本使用、如何搭建Scrapy-Redis開(kāi)發(fā)環(huán)境等,并結合百度百科案例使用這些知識點(diǎn)。
以上就是成為Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握的核心技術(shù)。你想通了嗎?其實(shí),做一個(gè)網(wǎng)絡(luò )爬蟲(chóng)并不難。只要掌握科學(xué)的學(xué)習方法,將理論基礎與實(shí)踐經(jīng)驗相結合,就能快速掌握爬蟲(chóng)的核心技術(shù)。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 一個(gè)特別小的爬蟲(chóng)案例!微信推文中的圖片 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-02-22 05:05
一個(gè)特別小的爬蟲(chóng)案例!微信推文中的圖片
)
大家好,今天給大家分享一個(gè)非常小的爬蟲(chóng)案例!
在微信推文中抓取圖片?。。?!
有人說(shuō),這有什么用,,,,萬(wàn)一有人的推特是把一個(gè)PPT的內容以圖片的形式放上去,你想把它弄下來(lái),那就是爬。
歡迎關(guān)注嗶哩嗶哩UP主:《我的兒子Q》。
堅持不懈,努力工作;你和我在一起!為戰斗而生!
相信大家都聽(tīng)說(shuō)過(guò)爬蟲(chóng)技術(shù)。一旦你學(xué)會(huì )了這項技術(shù),你將成為資源老板。這條推文將在以下兩個(gè)方面展開(kāi):
1、爬蟲(chóng)科學(xué)
2、微信推文中的圖片
爬行動(dòng)物科學(xué)的定義
近年來(lái),爬蟲(chóng)這個(gè)詞廣為流傳,還有一個(gè)新興的職位——爬蟲(chóng)工程師。那么什么是爬行動(dòng)物?
下面是百度百科的解釋?zhuān)?br /> 網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
大概還是不明白。
其實(shí)通俗的說(shuō),就是在網(wǎng)絡(luò )上根據自己的需要,通過(guò)相應的技術(shù)手段來(lái)獲取我們需要的數據信息。這個(gè)過(guò)程稱(chēng)為爬行。
該網(wǎng)站是API。. .
我們說(shuō)網(wǎng)絡(luò )上的每一個(gè)網(wǎng)站都被視為一個(gè)API,也就是一個(gè)接口,通過(guò)它我們可以獲取信息和數據。一個(gè)網(wǎng)站叫做 URL,這個(gè) URL 就是我們爬取的 API。
爬蟲(chóng)無(wú)非就是以下幾個(gè)流程:
1、了解網(wǎng)頁(yè)
2、獲取網(wǎng)頁(yè)內容
3、解析網(wǎng)頁(yè)并選擇需要的內容
4、保存你想要的
兩個(gè)機器人協(xié)議
在爬取之前,你需要知道一些事情:
1、服務(wù)器上的數據是專(zhuān)有的。
2、網(wǎng)絡(luò )爬蟲(chóng)數據牟利存在法律風(fēng)險。
3、爬蟲(chóng)可能會(huì )丟失個(gè)人數據。
許多公司還對爬蟲(chóng)進(jìn)行了一些預防設置。一般會(huì )判斷你的訪(fǎng)問(wèn)來(lái)源,并嘗試判斷你是被人訪(fǎng)問(wèn)還是被機器訪(fǎng)問(wèn),從而做出必要的限制。
robots協(xié)議,也稱(chēng)為robots.txt,是大家都認同的爬蟲(chóng)協(xié)議。說(shuō)白了,就是爬蟲(chóng)的道德標準。很多公司會(huì )在它的一些網(wǎng)站上設置robots協(xié)議,這個(gè)協(xié)議會(huì )告訴你哪些內容網(wǎng)站允許你抓取,哪些內容不允許抓取。該協(xié)議是 網(wǎng)站 根目錄中的 robots.txt 文件。京東的機器人協(xié)議如下。
首先,我將向大家解釋這些的目的。也希望大家都能做一個(gè)合法的爬蟲(chóng),遵守網(wǎng)絡(luò )道德,做社會(huì )主義的接班人。不過(guò)普通的小爬蟲(chóng)是允許的,大家可以大膽嘗試。
三爬蟲(chóng)框架
目前爬蟲(chóng)已經(jīng)有比較成熟的框架和比較成熟的第三方庫供大家使用。
上面給出了兩個(gè)更成熟的爬蟲(chóng)庫。下面我們簡(jiǎn)單介紹一下Requests的使用。
首先,您需要安裝此庫。庫的安裝方法很簡(jiǎn)單。在 Windows 系統上,以管理員身份運行 cmd 并執行 pip install 請求。
安裝好之后就可以測試了。
爬蟲(chóng)的框架如下:
import requests # 導入requests庫def Get_Url_text(URL): # 定義獲取相應鏈接文本的函數 try:# 這里是異常處理機制 r = requests.get(url, timeout=30) # 訪(fǎng)問(wèn)這個(gè)鏈接,并返回一個(gè)名為r的對象 r.raise_for_status() # 返回訪(fǎng)問(wèn)的狀態(tài),若為200,即為訪(fǎng)問(wèn)成功 r.encoding = r.apparent_encoding # 將網(wǎng)頁(yè)的編碼和頭文件的編碼改為一致 except: return "產(chǎn)生異常"if __name__ = "main": url = "https://www.Baidu.com" print(Get_Url_text(url))
四個(gè)Requests庫的一些常用方法
requests庫的七種常用方法
這里有兩個(gè)對象,一個(gè)是訪(fǎng)問(wèn)的url,一個(gè)是返回的響應對象,也就是前面代碼中的r對象,其中也有返回對象的一些屬性。如下表所示。
微信推文爬取圖片示例
簡(jiǎn)單說(shuō)一下這里使用的python自帶的urllib中的request。但是整體的爬取思路是一樣的。還用到了其他一些庫,大家可以自行理解。代碼和解釋如下所示。
import urllib.requestimport re # 正則表達式庫import osimport urllib# 根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html.decode('UTF-8')def getImg(html): reg = r' src="(.+?)" ' # 括號里面就是我們要取得的圖片網(wǎng)址 imgre = re.compile(reg) imglist = imgre.findall(html) # 表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中 x = 0 path = 'D:\\python_project\\GRASP_pic_from_wechat\\pic' # 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建 if not os.path.isdir(path): os.makedirs(path) paths = path + '\\' # 保存在test路徑下 for imgurl in imglist: urllib.request.urlretrieve(imgurl, '{0}{1}.jpg'.format(paths, x)) # 打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串 x = x + 1 return imglisthtml = getHtml("https://mp.weixin.qq.com/s/z8p ... 6quot;) # 獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼print(getImg(html)) # 從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
好了,今天的內容就到此結束,希望對大家有所幫助,歡迎點(diǎn)贊轉發(fā)??!
發(fā)送封面:
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
一個(gè)特別小的爬蟲(chóng)案例!微信推文中的圖片
)

大家好,今天給大家分享一個(gè)非常小的爬蟲(chóng)案例!
在微信推文中抓取圖片?。。?!
有人說(shuō),這有什么用,,,,萬(wàn)一有人的推特是把一個(gè)PPT的內容以圖片的形式放上去,你想把它弄下來(lái),那就是爬。
歡迎關(guān)注嗶哩嗶哩UP主:《我的兒子Q》。
堅持不懈,努力工作;你和我在一起!為戰斗而生!
相信大家都聽(tīng)說(shuō)過(guò)爬蟲(chóng)技術(shù)。一旦你學(xué)會(huì )了這項技術(shù),你將成為資源老板。這條推文將在以下兩個(gè)方面展開(kāi):
1、爬蟲(chóng)科學(xué)
2、微信推文中的圖片

爬行動(dòng)物科學(xué)的定義
近年來(lái),爬蟲(chóng)這個(gè)詞廣為流傳,還有一個(gè)新興的職位——爬蟲(chóng)工程師。那么什么是爬行動(dòng)物?
下面是百度百科的解釋?zhuān)?br /> 網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
大概還是不明白。

其實(shí)通俗的說(shuō),就是在網(wǎng)絡(luò )上根據自己的需要,通過(guò)相應的技術(shù)手段來(lái)獲取我們需要的數據信息。這個(gè)過(guò)程稱(chēng)為爬行。
該網(wǎng)站是API。. .
我們說(shuō)網(wǎng)絡(luò )上的每一個(gè)網(wǎng)站都被視為一個(gè)API,也就是一個(gè)接口,通過(guò)它我們可以獲取信息和數據。一個(gè)網(wǎng)站叫做 URL,這個(gè) URL 就是我們爬取的 API。
爬蟲(chóng)無(wú)非就是以下幾個(gè)流程:
1、了解網(wǎng)頁(yè)
2、獲取網(wǎng)頁(yè)內容
3、解析網(wǎng)頁(yè)并選擇需要的內容
4、保存你想要的
兩個(gè)機器人協(xié)議
在爬取之前,你需要知道一些事情:
1、服務(wù)器上的數據是專(zhuān)有的。
2、網(wǎng)絡(luò )爬蟲(chóng)數據牟利存在法律風(fēng)險。
3、爬蟲(chóng)可能會(huì )丟失個(gè)人數據。
許多公司還對爬蟲(chóng)進(jìn)行了一些預防設置。一般會(huì )判斷你的訪(fǎng)問(wèn)來(lái)源,并嘗試判斷你是被人訪(fǎng)問(wèn)還是被機器訪(fǎng)問(wèn),從而做出必要的限制。
robots協(xié)議,也稱(chēng)為robots.txt,是大家都認同的爬蟲(chóng)協(xié)議。說(shuō)白了,就是爬蟲(chóng)的道德標準。很多公司會(huì )在它的一些網(wǎng)站上設置robots協(xié)議,這個(gè)協(xié)議會(huì )告訴你哪些內容網(wǎng)站允許你抓取,哪些內容不允許抓取。該協(xié)議是 網(wǎng)站 根目錄中的 robots.txt 文件。京東的機器人協(xié)議如下。

首先,我將向大家解釋這些的目的。也希望大家都能做一個(gè)合法的爬蟲(chóng),遵守網(wǎng)絡(luò )道德,做社會(huì )主義的接班人。不過(guò)普通的小爬蟲(chóng)是允許的,大家可以大膽嘗試。

三爬蟲(chóng)框架
目前爬蟲(chóng)已經(jīng)有比較成熟的框架和比較成熟的第三方庫供大家使用。

上面給出了兩個(gè)更成熟的爬蟲(chóng)庫。下面我們簡(jiǎn)單介紹一下Requests的使用。
首先,您需要安裝此庫。庫的安裝方法很簡(jiǎn)單。在 Windows 系統上,以管理員身份運行 cmd 并執行 pip install 請求。

安裝好之后就可以測試了。

爬蟲(chóng)的框架如下:
import requests # 導入requests庫def Get_Url_text(URL): # 定義獲取相應鏈接文本的函數 try:# 這里是異常處理機制 r = requests.get(url, timeout=30) # 訪(fǎng)問(wèn)這個(gè)鏈接,并返回一個(gè)名為r的對象 r.raise_for_status() # 返回訪(fǎng)問(wèn)的狀態(tài),若為200,即為訪(fǎng)問(wèn)成功 r.encoding = r.apparent_encoding # 將網(wǎng)頁(yè)的編碼和頭文件的編碼改為一致 except: return "產(chǎn)生異常"if __name__ = "main": url = "https://www.Baidu.com" print(Get_Url_text(url))

四個(gè)Requests庫的一些常用方法
requests庫的七種常用方法

這里有兩個(gè)對象,一個(gè)是訪(fǎng)問(wèn)的url,一個(gè)是返回的響應對象,也就是前面代碼中的r對象,其中也有返回對象的一些屬性。如下表所示。

微信推文爬取圖片示例
簡(jiǎn)單說(shuō)一下這里使用的python自帶的urllib中的request。但是整體的爬取思路是一樣的。還用到了其他一些庫,大家可以自行理解。代碼和解釋如下所示。
import urllib.requestimport re # 正則表達式庫import osimport urllib# 根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html.decode('UTF-8')def getImg(html): reg = r' src="(.+?)" ' # 括號里面就是我們要取得的圖片網(wǎng)址 imgre = re.compile(reg) imglist = imgre.findall(html) # 表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中 x = 0 path = 'D:\\python_project\\GRASP_pic_from_wechat\\pic' # 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建 if not os.path.isdir(path): os.makedirs(path) paths = path + '\\' # 保存在test路徑下 for imgurl in imglist: urllib.request.urlretrieve(imgurl, '{0}{1}.jpg'.format(paths, x)) # 打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串 x = x + 1 return imglisthtml = getHtml("https://mp.weixin.qq.com/s/z8p ... 6quot;) # 獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼print(getImg(html)) # 從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
好了,今天的內容就到此結束,希望對大家有所幫助,歡迎點(diǎn)贊轉發(fā)??!
發(fā)送封面:


網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)之旅學(xué)習文章目錄()-樂(lè )題庫 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 73 次瀏覽 ? 2022-02-20 04:15
)
Python爬蟲(chóng)學(xué)習
文章目錄
前言
寫(xiě)個(gè)項目書(shū)找資料真是大手筆,訓練模型采集圖片更煩人。我也復習了自己的python,于是開(kāi)始了python爬蟲(chóng)的旅程,這樣以后可以更方便的找資料。
一、什么是爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
爬蟲(chóng)是一段代碼,可以自動(dòng)從 Internet 上找到我需要的一些信息。例如,如果我想搜索一些信息,我可以搜索全世界。使用爬蟲(chóng),我們可以通過(guò)關(guān)鍵字過(guò)濾我們需要的內容?;蛘吣阆肟锤呤找暵实碾娪?。這時(shí)候也可以使用爬蟲(chóng)來(lái)查找一些收視率高的電影。
爬行動(dòng)物的矛和盾
1、防爬機制
2、反反爬策略
3、robots.txt(君子協(xié)議)
二、打開(kāi)一個(gè)小爬蟲(chóng)
使用軟件 Pycharm
爬蟲(chóng):通過(guò)編寫(xiě)程序獲取互聯(lián)網(wǎng)資源
要求:使用程序模擬瀏覽器。輸入從中獲取資源或內容的 URL
1、導入urlopen包
from urllib.request import urlopen
2、打開(kāi)一個(gè) URL 并獲得響應
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read()) #打印信息
前面有個(gè)b',代表字節,我們需要把字節轉成字符串
3、解碼
查看charest等號后面的內容,通過(guò)resp.read.decode()解碼
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read().decode("utf-8")) #打印解碼信息
4、保存到文件
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
with open("mybaidu.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")
這次信息保存在html文件中
5、打開(kāi)
這時(shí),百度就會(huì )打開(kāi)。
上面是我們搜索打開(kāi)百度的網(wǎng)址,下面的網(wǎng)址明顯不一樣
它的本質(zhì)是一樣的,你可以查看網(wǎng)頁(yè)的源代碼,你會(huì )發(fā)現源代碼是一樣的,上面也有提到
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
還能爬CCTV
from urllib.request import urlopen #導入urlopen
url = "http://v.cctv.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
#print(resp.read().decode("utf-8"))
with open("my2.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)之旅學(xué)習文章目錄()-樂(lè )題庫
)
Python爬蟲(chóng)學(xué)習
文章目錄
前言
寫(xiě)個(gè)項目書(shū)找資料真是大手筆,訓練模型采集圖片更煩人。我也復習了自己的python,于是開(kāi)始了python爬蟲(chóng)的旅程,這樣以后可以更方便的找資料。
一、什么是爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
爬蟲(chóng)是一段代碼,可以自動(dòng)從 Internet 上找到我需要的一些信息。例如,如果我想搜索一些信息,我可以搜索全世界。使用爬蟲(chóng),我們可以通過(guò)關(guān)鍵字過(guò)濾我們需要的內容?;蛘吣阆肟锤呤找暵实碾娪?。這時(shí)候也可以使用爬蟲(chóng)來(lái)查找一些收視率高的電影。
爬行動(dòng)物的矛和盾
1、防爬機制
2、反反爬策略
3、robots.txt(君子協(xié)議)
二、打開(kāi)一個(gè)小爬蟲(chóng)
使用軟件 Pycharm
爬蟲(chóng):通過(guò)編寫(xiě)程序獲取互聯(lián)網(wǎng)資源
要求:使用程序模擬瀏覽器。輸入從中獲取資源或內容的 URL
1、導入urlopen包
from urllib.request import urlopen
2、打開(kāi)一個(gè) URL 并獲得響應
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read()) #打印信息

前面有個(gè)b',代表字節,我們需要把字節轉成字符串
3、解碼

查看charest等號后面的內容,通過(guò)resp.read.decode()解碼
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read().decode("utf-8")) #打印解碼信息

4、保存到文件
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
with open("mybaidu.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")



這次信息保存在html文件中
5、打開(kāi)

這時(shí),百度就會(huì )打開(kāi)。

上面是我們搜索打開(kāi)百度的網(wǎng)址,下面的網(wǎng)址明顯不一樣

它的本質(zhì)是一樣的,你可以查看網(wǎng)頁(yè)的源代碼,你會(huì )發(fā)現源代碼是一樣的,上面也有提到
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
還能爬CCTV
from urllib.request import urlopen #導入urlopen
url = "http://v.cctv.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
#print(resp.read().decode("utf-8"))
with open("my2.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 281 次瀏覽 ? 2022-02-19 21:14
)
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... %2339;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 39%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人)
)
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?

從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... %2339;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,



構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 39%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化

最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-02-19 21:10
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... 23x27;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists('D:\圖片'):
pass
else:
os.makedirs('D:\圖片')
path = 'D:\圖片\\'
for index,i in enumerate(pic_url):
filename = path + str(index) + '.jpg'
print(filename)
with open(filename, 'wb+') as f:
f.write(requests.get(i).content)
if __name__ == '__main__':
num = int(input('爬取幾次圖片:一次30張'))
down_img(num)
爬取過(guò)程
抓取結果
文章首次發(fā)表于: 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... 23x27;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists('D:\圖片'):
pass
else:
os.makedirs('D:\圖片')
path = 'D:\圖片\\'
for index,i in enumerate(pic_url):
filename = path + str(index) + '.jpg'
print(filename)
with open(filename, 'wb+') as f:
f.write(requests.get(i).content)
if __name__ == '__main__':
num = int(input('爬取幾次圖片:一次30張'))
down_img(num)
爬取過(guò)程
抓取結果
文章首次發(fā)表于:
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python這把利器,開(kāi)啟網(wǎng)絡(luò )爬蟲(chóng)之路(1)(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 199 次瀏覽 ? 2022-02-19 11:21
摘要:獲取數據是數據分析的重要組成部分,網(wǎng)絡(luò )爬蟲(chóng)是獲取數據的重要渠道之一。鑒于此,我拿起了 Python 作為武器,開(kāi)始了爬網(wǎng)之路。本文使用的版本是python3.6,用于抓取深圳大學(xué)首頁(yè)的圖片信息和百度股票網(wǎng)某只股票的日K和月K數據。程序主要分為三個(gè)部分:網(wǎng)頁(yè)源代碼的獲取、所需內容的提取、所得結果的排列。
【歡迎關(guān)注、點(diǎn)贊、采集、私信、交流】一起學(xué)習進(jìn)步
獲取網(wǎng)頁(yè)源代碼 獲取百度圖片網(wǎng)頁(yè)
通過(guò)在百度圖片上隨機搜索關(guān)鍵詞,可以得到網(wǎng)頁(yè)地址并分析其規律性。發(fā)現可以通過(guò)修改地址末尾的word字段來(lái)搜索任意關(guān)鍵字的圖片。因此,我們通過(guò)自定義word字段,將自定義word字段添加到固有的URL格式中來(lái)獲取要爬取的網(wǎng)頁(yè)地址,并使用requests模塊中的get函數將網(wǎng)頁(yè)的源代碼下載到記憶。
如:
param={"word":"深圳大學(xué)"}
r=requests.get('/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=47_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width= &height=&face=0&istype=2&ie=utf-8&',params=param)
1.2 百度股票數據采集
百度互聯(lián)互通的信息在網(wǎng)頁(yè)上以動(dòng)畫(huà)的形式展示,例如:
從這種顯示數據的方式來(lái)看,直接從網(wǎng)頁(yè)中獲取所需的數據基本上是不可能的。因此,我們在巡視中打開(kāi)網(wǎng)絡(luò )查找動(dòng)畫(huà)中的數據源,如:
我們發(fā)現當月K按鈕被點(diǎn)擊時(shí),地址出現在網(wǎng)絡(luò )中。因此,當我們打開(kāi)地址時(shí),發(fā)現正是我們需要的數據。通過(guò)實(shí)驗發(fā)現,地址中的數據會(huì )根據時(shí)間的變化自動(dòng)更新。因此,復制地址,解析地址,得到要爬取的數據。
提取所需內容
2.1 從百度圖片中提取圖片地址
在解析網(wǎng)頁(yè)的時(shí)候,我們發(fā)現所有頁(yè)面的圖片地址都在thumb:字段后面,所以我們可以使用re模塊中的findall函數來(lái)匹配地址,如:
img_links=re.findall('"thumbURL":"(.*?)",',html)
獲取到地址后,同樣的方法可以使用requests.get將圖片信息下載到內存中。
2.2 提取百度股票信息
解析之前得到的數據,發(fā)現其內容是以每個(gè)日期為單位記錄的格式,而且非常有規律,如:{"errorNo":0,"errorMsg":"SUCCESS","mashData" :[ {"date":20180515,"kline":{"open":220.83999633789,"high":271.98001098633,"low":213.55599975586, "close":271.92001342773,"volume":39366713,"amount":0,"ccl":null,"preClose":272.26000976562,"netChangeRatio":-0. 201},
因此,同樣的方式,通過(guò)requests.get,我們可以得到我們需要的每一條信息,比如獲取零錢(qián):
monthnetchangeratio=re.findall('"netChangeRatio":(.*?)}',html)
爬取結果整理
3.1 百度圖片下載:
首先,創(chuàng )建一個(gè)保存圖片的文件夾:os.makedirs('./szdx/',exist_ok=True)
獲取到所有圖片的地址后,可以通過(guò)設置循環(huán)來(lái)一張一張下載圖片:
對于 img_links 中的鏈接:
picurl=鏈接
pic=requests.get(picurl)
打開(kāi) ('./szdx/img'+str(j)+'.jpg','wb') 作為 f:
對于 pic.iter_content(chunk_size=32):
f.write(塊)
f.close()
j=j+1#這里的j是為了防止在給每張圖片命名的時(shí)候重復命名。
3.2百度股票信息整理
在實(shí)驗中,我們使用字典來(lái)存儲股票信息,方便按日期順序檢索股票信息:
月數據={}
我=0
對于 d 日期:
數據={}
數據tmp={}
datatmp['open']=re.findall(d+',"kline":{"open":(.*?),"high"',html)
...(中間信息提取過(guò)程省略)
我=我+1
圖為每日K數據的第一個(gè)日期信息。
總結
通過(guò)這個(gè)實(shí)驗練習,我們熟悉了網(wǎng)頁(yè)的構成和數據爬取的基本原理。更重要的是,通過(guò)編程練習,我們發(fā)現了許多新的編程技能,并在實(shí)踐中不斷提高這些編程技能。經(jīng)過(guò)小組討論,確定了數據的來(lái)源,掌握了各種函數的使用方法,掌握了數據的最終存儲形式,最終完成了實(shí)驗。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python這把利器,開(kāi)啟網(wǎng)絡(luò )爬蟲(chóng)之路(1)(組圖))
摘要:獲取數據是數據分析的重要組成部分,網(wǎng)絡(luò )爬蟲(chóng)是獲取數據的重要渠道之一。鑒于此,我拿起了 Python 作為武器,開(kāi)始了爬網(wǎng)之路。本文使用的版本是python3.6,用于抓取深圳大學(xué)首頁(yè)的圖片信息和百度股票網(wǎng)某只股票的日K和月K數據。程序主要分為三個(gè)部分:網(wǎng)頁(yè)源代碼的獲取、所需內容的提取、所得結果的排列。
【歡迎關(guān)注、點(diǎn)贊、采集、私信、交流】一起學(xué)習進(jìn)步
獲取網(wǎng)頁(yè)源代碼 獲取百度圖片網(wǎng)頁(yè)
通過(guò)在百度圖片上隨機搜索關(guān)鍵詞,可以得到網(wǎng)頁(yè)地址并分析其規律性。發(fā)現可以通過(guò)修改地址末尾的word字段來(lái)搜索任意關(guān)鍵字的圖片。因此,我們通過(guò)自定義word字段,將自定義word字段添加到固有的URL格式中來(lái)獲取要爬取的網(wǎng)頁(yè)地址,并使用requests模塊中的get函數將網(wǎng)頁(yè)的源代碼下載到記憶。
如:
param={"word":"深圳大學(xué)"}
r=requests.get('/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=47_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width= &height=&face=0&istype=2&ie=utf-8&',params=param)
1.2 百度股票數據采集

百度互聯(lián)互通的信息在網(wǎng)頁(yè)上以動(dòng)畫(huà)的形式展示,例如:
從這種顯示數據的方式來(lái)看,直接從網(wǎng)頁(yè)中獲取所需的數據基本上是不可能的。因此,我們在巡視中打開(kāi)網(wǎng)絡(luò )查找動(dòng)畫(huà)中的數據源,如:

我們發(fā)現當月K按鈕被點(diǎn)擊時(shí),地址出現在網(wǎng)絡(luò )中。因此,當我們打開(kāi)地址時(shí),發(fā)現正是我們需要的數據。通過(guò)實(shí)驗發(fā)現,地址中的數據會(huì )根據時(shí)間的變化自動(dòng)更新。因此,復制地址,解析地址,得到要爬取的數據。
提取所需內容
2.1 從百度圖片中提取圖片地址
在解析網(wǎng)頁(yè)的時(shí)候,我們發(fā)現所有頁(yè)面的圖片地址都在thumb:字段后面,所以我們可以使用re模塊中的findall函數來(lái)匹配地址,如:
img_links=re.findall('"thumbURL":"(.*?)",',html)
獲取到地址后,同樣的方法可以使用requests.get將圖片信息下載到內存中。
2.2 提取百度股票信息
解析之前得到的數據,發(fā)現其內容是以每個(gè)日期為單位記錄的格式,而且非常有規律,如:{"errorNo":0,"errorMsg":"SUCCESS","mashData" :[ {"date":20180515,"kline":{"open":220.83999633789,"high":271.98001098633,"low":213.55599975586, "close":271.92001342773,"volume":39366713,"amount":0,"ccl":null,"preClose":272.26000976562,"netChangeRatio":-0. 201},
因此,同樣的方式,通過(guò)requests.get,我們可以得到我們需要的每一條信息,比如獲取零錢(qián):
monthnetchangeratio=re.findall('"netChangeRatio":(.*?)}',html)
爬取結果整理
3.1 百度圖片下載:
首先,創(chuàng )建一個(gè)保存圖片的文件夾:os.makedirs('./szdx/',exist_ok=True)
獲取到所有圖片的地址后,可以通過(guò)設置循環(huán)來(lái)一張一張下載圖片:
對于 img_links 中的鏈接:
picurl=鏈接
pic=requests.get(picurl)
打開(kāi) ('./szdx/img'+str(j)+'.jpg','wb') 作為 f:
對于 pic.iter_content(chunk_size=32):
f.write(塊)
f.close()
j=j+1#這里的j是為了防止在給每張圖片命名的時(shí)候重復命名。

3.2百度股票信息整理
在實(shí)驗中,我們使用字典來(lái)存儲股票信息,方便按日期順序檢索股票信息:
月數據={}
我=0
對于 d 日期:
數據={}
數據tmp={}
datatmp['open']=re.findall(d+',"kline":{"open":(.*?),"high"',html)
...(中間信息提取過(guò)程省略)
我=我+1

圖為每日K數據的第一個(gè)日期信息。
總結
通過(guò)這個(gè)實(shí)驗練習,我們熟悉了網(wǎng)頁(yè)的構成和數據爬取的基本原理。更重要的是,通過(guò)編程練習,我們發(fā)現了許多新的編程技能,并在實(shí)踐中不斷提高這些編程技能。經(jīng)過(guò)小組討論,確定了數據的來(lái)源,掌握了各種函數的使用方法,掌握了數據的最終存儲形式,最終完成了實(shí)驗。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生夏敏捷主編))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-02-18 11:06
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生夏敏捷主編)爬蟲(chóng)應用-抓百度圖片
爬取指定網(wǎng)頁(yè)中的圖片,需要經(jīng)過(guò)以下三個(gè)步驟:
?。?)指定網(wǎng)站的鏈接,抓取網(wǎng)站的源碼(如果用google瀏覽器,鼠標右鍵->Inspect->Elements中的html內容)
(2)設置正則表達式來(lái)匹配你要抓取的內容
(3)設置循環(huán)列表重復抓取和保存內容
下面介紹兩種方法來(lái)實(shí)現指定網(wǎng)頁(yè)中圖片的抓取
(1)方法一:使用正則表達式過(guò)濾抓取到的html內容字符串
# 第一個(gè)簡(jiǎn)單的爬取圖片的程序import urllib.request # python自帶的爬操作url的庫import re # 正則表達式# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # [^\s]*? 表示最小匹配, 兩個(gè)括號表示列表中有兩個(gè)元組 # imageList = re.findall(r'(https:[^\s]*?(png))"', page) imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page) x = 0 # 循環(huán)列表 for imageUrl in imageList: try: print('正在下載: %s' % imageUrl[0]) # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(imageUrl[0], image_save_path) x = x + 1 except: continue passif __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = "https://www.cnblogs.com/ttweix ... ot%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page) # print(page)
注意代碼中需要修改的是imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page)。如何設計正則表達式需要可以根據你要抓取的內容設置,我的設計來(lái)源如下:
可以看到,因為這個(gè)網(wǎng)頁(yè)上的圖片都是png格式的,所以也可以寫(xiě)成imageList = re.findall(r'(https:[^\s]*?(png))"', page) .
(2)方法二:使用BeautifulSoup庫解析html網(wǎng)頁(yè)
from bs4 import BeautifulSoup # BeautifulSoup是python處理HTML/XML的函數庫,是Python內置的網(wǎng)頁(yè)分析工具import urllib # python自帶的爬操作url的庫# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # 按照html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 格式化輸出DOM樹(shù)的內容 print(soup.prettify()) # 返回所有包含img標簽的列表,因為在Html文件中圖片的插入呈現形式是 imgList = soup.find_all('img') x = 0 # 循環(huán)找到的圖片列表,注意,這里手動(dòng)設置從第2張圖片開(kāi)始,是因為我debug看到了第一張圖片不是我想要的圖片 for imgUrl in imgList[1:]: print('正在下載:%s ' % imgUrl.get('src')) # 得到scr的內容,這里返回的就是Url字符串鏈接,如'https://img2020.cnblogs.com/bl ... 39%3B image_url = imgUrl.get('src') # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(image_url, image_save_path) x = x + 1if __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = 'https://www.cnblogs.com/ttweix ... 39%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page)
這兩種方法各有優(yōu)缺點(diǎn)。我認為它們可以靈活地組合使用。例如,使用方法2中指定標簽的方法來(lái)縮小要查找的內容的范圍,然后使用正則表達式匹配所需的內容。這樣做更簡(jiǎn)潔明了。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生夏敏捷主編))
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生夏敏捷主編)爬蟲(chóng)應用-抓百度圖片
爬取指定網(wǎng)頁(yè)中的圖片,需要經(jīng)過(guò)以下三個(gè)步驟:
?。?)指定網(wǎng)站的鏈接,抓取網(wǎng)站的源碼(如果用google瀏覽器,鼠標右鍵->Inspect->Elements中的html內容)
(2)設置正則表達式來(lái)匹配你要抓取的內容
(3)設置循環(huán)列表重復抓取和保存內容
下面介紹兩種方法來(lái)實(shí)現指定網(wǎng)頁(yè)中圖片的抓取
(1)方法一:使用正則表達式過(guò)濾抓取到的html內容字符串
# 第一個(gè)簡(jiǎn)單的爬取圖片的程序import urllib.request # python自帶的爬操作url的庫import re # 正則表達式# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # [^\s]*? 表示最小匹配, 兩個(gè)括號表示列表中有兩個(gè)元組 # imageList = re.findall(r'(https:[^\s]*?(png))"', page) imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page) x = 0 # 循環(huán)列表 for imageUrl in imageList: try: print('正在下載: %s' % imageUrl[0]) # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(imageUrl[0], image_save_path) x = x + 1 except: continue passif __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = "https://www.cnblogs.com/ttweix ... ot%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page) # print(page)
注意代碼中需要修改的是imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page)。如何設計正則表達式需要可以根據你要抓取的內容設置,我的設計來(lái)源如下:

可以看到,因為這個(gè)網(wǎng)頁(yè)上的圖片都是png格式的,所以也可以寫(xiě)成imageList = re.findall(r'(https:[^\s]*?(png))"', page) .
(2)方法二:使用BeautifulSoup庫解析html網(wǎng)頁(yè)
from bs4 import BeautifulSoup # BeautifulSoup是python處理HTML/XML的函數庫,是Python內置的網(wǎng)頁(yè)分析工具import urllib # python自帶的爬操作url的庫# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # 按照html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 格式化輸出DOM樹(shù)的內容 print(soup.prettify()) # 返回所有包含img標簽的列表,因為在Html文件中圖片的插入呈現形式是 imgList = soup.find_all('img') x = 0 # 循環(huán)找到的圖片列表,注意,這里手動(dòng)設置從第2張圖片開(kāi)始,是因為我debug看到了第一張圖片不是我想要的圖片 for imgUrl in imgList[1:]: print('正在下載:%s ' % imgUrl.get('src')) # 得到scr的內容,這里返回的就是Url字符串鏈接,如'https://img2020.cnblogs.com/bl ... 39%3B image_url = imgUrl.get('src') # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(image_url, image_save_path) x = x + 1if __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = 'https://www.cnblogs.com/ttweix ... 39%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page)
這兩種方法各有優(yōu)缺點(diǎn)。我認為它們可以靈活地組合使用。例如,使用方法2中指定標簽的方法來(lái)縮小要查找的內容的范圍,然后使用正則表達式匹配所需的內容。這樣做更簡(jiǎn)潔明了。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(通用網(wǎng)絡(luò )爬蟲(chóng)和聚焦爬蟲(chóng)(一):百度圖片爬取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 75 次瀏覽 ? 2022-02-17 17:21
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng)
根據使用場(chǎng)景,網(wǎng)絡(luò )爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng):是搜索引擎爬蟲(chóng)系統(百度、谷歌、雅虎等)的重要組成部分,它從互聯(lián)網(wǎng)上采集網(wǎng)頁(yè)和采集信息,這些網(wǎng)頁(yè)信息用于構建一個(gè)為搜索引擎提供支持的索引,它決定了整個(gè)引擎系統的內容是否豐富,信息是否即時(shí),所以其性能的好壞直接影響到搜索引擎的效果。主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。
聚焦爬蟲(chóng):是一種“面向特定主題需求”的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般搜索引擎爬蟲(chóng)的區別在于,焦點(diǎn)爬蟲(chóng)在實(shí)現網(wǎng)絡(luò )爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行處理和過(guò)濾,并盡量保證只爬取與需求相關(guān)的內容。網(wǎng)頁(yè)信息。也就是一般意義上的爬行動(dòng)物。
百度圖片爬取
需求分析,至少要實(shí)現兩個(gè)功能:一是搜索圖片,二是自動(dòng)下載
分析網(wǎng)頁(yè)(注意:不用的參數可以刪除不影響頁(yè)面加載)源碼,用F12
編寫(xiě)正則表達式或其他解析器代碼
本地存儲數據
正式寫(xiě)python爬蟲(chóng)代碼
頁(yè)面分析非常重要。不同的需求對應不同的URL,不同的URL的源碼明顯不同。因此,掌握如何分析頁(yè)面是爬蟲(chóng)成功的第一步。本頁(yè)源碼分析如下圖所示:
import os
import re
import requests
from colorama import Fore
def download_image(url, keyword):
"""
下載圖片
:param url: 百度圖片的網(wǎng)址
:return: Bool
"""
# 1. 向服務(wù)器發(fā)起HTTP請求
response = requests.get(url)
# 2. 獲取服務(wù)器端的響應信息
# 響應信息: status_code, text, url
data = response.text # 獲取頁(yè)面源碼
# 3. 編寫(xiě)正則表達式,獲取圖片的網(wǎng)址
# data = ...[{"ObjURL":"http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg",....}]...
# 需要獲取到的是: http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg
# 正則的語(yǔ)法: .代表除了\n之外的任意字符, *代表前一個(gè)字符出現0次或者無(wú)數次. ?代表非貪婪模式
pattern = r'"objURL":"(.*?)"'
# 4. 根據正則表達式尋找符合條件的圖片網(wǎng)址.
image_urls = re.findall(pattern, data)
# 5. 根據圖片網(wǎng)址下載貓的圖片到本地
index = 1
for image_url in image_urls:
print(image_url) # 'xxxx.jpg xxxx.png'
# response.text 返回 unicode 的文本信息, response.text 返回 bytes 類(lèi)型的信息
try:
response = requests.get(image_url) # 向每一個(gè)圖片的url發(fā)起HTTP請求
except Exception as e:
print(Fore.RED + "[-] 下載失?。?%s" % (image_url))
else:
old_image_filename = image_url.split('/')[-1]
if old_image_filename:
# 獲取圖片的后綴
image_format = old_image_filename.split('.')[-1]
# 處理 url 為...jpeg?imageview&thumbnail=550x0 結尾(傳參)的情況
if '?' in image_format:
image_format = image_format.split('?')[0]
else:
image_format = 'jpg'
# 生成圖片的存儲目錄
keyword = keyword.split(' ', '-')
if not os.path.exists(keyword):
os.mkdir(keyword)
image_filename = os.path.join(keyword, str(index) + '.' + image_format)
# 保存圖片
with open(image_filename, 'wb') as f:
f.write(response.content)
print(Fore.BLUE + "[+] 保存圖片%s.jpg成功" % (index))
index += 1
if __name__ == '__main__':
keyword = input("請輸入批量下載圖片的關(guān)鍵字: ")
url = 'http://image.baidu.com/search/index?tn=baiduimage&word=' + keyword
print(Fore.BLUE + '[+] 正在請求網(wǎng)址: %s' % (url))
download_image(url, keyword)
結果:
常見(jiàn)問(wèn)題:
為什么只有30張圖片,百度有30多張圖片
百度圖片是響應式的,下拉的時(shí)候會(huì )不斷的加載新的圖片,也就是說(shuō)瀏覽器中的頁(yè)面是通過(guò)JS處理數據的結果,Ajax爬蟲(chóng)的內容這里不再詳述。
搜索頁(yè)面下點(diǎn)擊單張圖片的url與程序中獲取的ObjURL不一致
這可能是百度緩存處理的結果。每張圖片本質(zhì)上都是“外網(wǎng)”,不是百度,所以在程序中,選擇向實(shí)際存儲圖片的url發(fā)起HTTP請求。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(通用網(wǎng)絡(luò )爬蟲(chóng)和聚焦爬蟲(chóng)(一):百度圖片爬取)
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng)
根據使用場(chǎng)景,網(wǎng)絡(luò )爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng):是搜索引擎爬蟲(chóng)系統(百度、谷歌、雅虎等)的重要組成部分,它從互聯(lián)網(wǎng)上采集網(wǎng)頁(yè)和采集信息,這些網(wǎng)頁(yè)信息用于構建一個(gè)為搜索引擎提供支持的索引,它決定了整個(gè)引擎系統的內容是否豐富,信息是否即時(shí),所以其性能的好壞直接影響到搜索引擎的效果。主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。

聚焦爬蟲(chóng):是一種“面向特定主題需求”的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般搜索引擎爬蟲(chóng)的區別在于,焦點(diǎn)爬蟲(chóng)在實(shí)現網(wǎng)絡(luò )爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行處理和過(guò)濾,并盡量保證只爬取與需求相關(guān)的內容。網(wǎng)頁(yè)信息。也就是一般意義上的爬行動(dòng)物。
百度圖片爬取
需求分析,至少要實(shí)現兩個(gè)功能:一是搜索圖片,二是自動(dòng)下載
分析網(wǎng)頁(yè)(注意:不用的參數可以刪除不影響頁(yè)面加載)源碼,用F12
編寫(xiě)正則表達式或其他解析器代碼
本地存儲數據
正式寫(xiě)python爬蟲(chóng)代碼
頁(yè)面分析非常重要。不同的需求對應不同的URL,不同的URL的源碼明顯不同。因此,掌握如何分析頁(yè)面是爬蟲(chóng)成功的第一步。本頁(yè)源碼分析如下圖所示:

import os
import re
import requests
from colorama import Fore
def download_image(url, keyword):
"""
下載圖片
:param url: 百度圖片的網(wǎng)址
:return: Bool
"""
# 1. 向服務(wù)器發(fā)起HTTP請求
response = requests.get(url)
# 2. 獲取服務(wù)器端的響應信息
# 響應信息: status_code, text, url
data = response.text # 獲取頁(yè)面源碼
# 3. 編寫(xiě)正則表達式,獲取圖片的網(wǎng)址
# data = ...[{"ObjURL":"http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg",....}]...
# 需要獲取到的是: http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg
# 正則的語(yǔ)法: .代表除了\n之外的任意字符, *代表前一個(gè)字符出現0次或者無(wú)數次. ?代表非貪婪模式
pattern = r'"objURL":"(.*?)"'
# 4. 根據正則表達式尋找符合條件的圖片網(wǎng)址.
image_urls = re.findall(pattern, data)
# 5. 根據圖片網(wǎng)址下載貓的圖片到本地
index = 1
for image_url in image_urls:
print(image_url) # 'xxxx.jpg xxxx.png'
# response.text 返回 unicode 的文本信息, response.text 返回 bytes 類(lèi)型的信息
try:
response = requests.get(image_url) # 向每一個(gè)圖片的url發(fā)起HTTP請求
except Exception as e:
print(Fore.RED + "[-] 下載失?。?%s" % (image_url))
else:
old_image_filename = image_url.split('/')[-1]
if old_image_filename:
# 獲取圖片的后綴
image_format = old_image_filename.split('.')[-1]
# 處理 url 為...jpeg?imageview&thumbnail=550x0 結尾(傳參)的情況
if '?' in image_format:
image_format = image_format.split('?')[0]
else:
image_format = 'jpg'
# 生成圖片的存儲目錄
keyword = keyword.split(' ', '-')
if not os.path.exists(keyword):
os.mkdir(keyword)
image_filename = os.path.join(keyword, str(index) + '.' + image_format)
# 保存圖片
with open(image_filename, 'wb') as f:
f.write(response.content)
print(Fore.BLUE + "[+] 保存圖片%s.jpg成功" % (index))
index += 1
if __name__ == '__main__':
keyword = input("請輸入批量下載圖片的關(guān)鍵字: ")
url = 'http://image.baidu.com/search/index?tn=baiduimage&word=' + keyword
print(Fore.BLUE + '[+] 正在請求網(wǎng)址: %s' % (url))
download_image(url, keyword)
結果:

常見(jiàn)問(wèn)題:
為什么只有30張圖片,百度有30多張圖片
百度圖片是響應式的,下拉的時(shí)候會(huì )不斷的加載新的圖片,也就是說(shuō)瀏覽器中的頁(yè)面是通過(guò)JS處理數據的結果,Ajax爬蟲(chóng)的內容這里不再詳述。
搜索頁(yè)面下點(diǎn)擊單張圖片的url與程序中獲取的ObjURL不一致
這可能是百度緩存處理的結果。每張圖片本質(zhì)上都是“外網(wǎng)”,不是百度,所以在程序中,選擇向實(shí)際存儲圖片的url發(fā)起HTTP請求。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(fildder抓包來(lái)分析這些新聞網(wǎng)址等信息隱藏在那個(gè)地方 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 84 次瀏覽 ? 2022-02-16 05:21
)
先分析
打開(kāi)網(wǎng)站后,再打開(kāi)源碼,發(fā)現之前的一些新聞頭條在源碼中可以找到,而下面的頭條在源碼中找不到
這時(shí)候我們就需要使用fildder抓包來(lái)分析這些新聞的URL以及隱藏在那個(gè)地方的其他信息
這些有我們正在尋找的信息
我們復制網(wǎng)址在瀏覽器中打開(kāi)發(fā)現不是我們要找的源信息
復制這個(gè)url找到我們的源碼,比較兩個(gè)url的區別
t只是一個(gè)時(shí)間戳,我們將第二個(gè)URL改為
&ajax=json
我們可以通過(guò)上面的網(wǎng)址訪(fǎng)問(wèn)源代碼
我們受到下面藍色網(wǎng)址的啟發(fā),只需要通過(guò)以上網(wǎng)址的拼接來(lái)獲取我們的源代碼
1、首先定義我們要爬取哪些字段。這是在 items 中定義的
import scrapy
class BaidunewsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# pass
"""1定義爬取的東西"""
title=scrapy.Field()
link=scrapy.Field()
content=scrapy.Field()
2、編寫(xiě)爬蟲(chóng)文件
# -*- coding: utf-8 -*-
import scrapy
from baidunews.items import BaidunewsItem
from scrapy.http import Request
import re
class NewsSpider(scrapy.Spider):
name = 'news'
allowed_domains = ['news.baidu.com']
start_urls = ['http://news.baidu.com/widget%3 ... 39%3B]
all_id = ['LocalNews', 'civilnews', 'InternationalNews', 'EnterNews', 'SportNews', 'FinanceNews', 'TechNews',
'MilitaryNews', 'InternetNews', 'DiscoveryNews', 'LadyNews', 'HealthNews', 'PicWall']
all_url = []
for i in range(len(all_id)):
current_id = all_id[i]
current_url = 'http://news.baidu.com/widget?id=' + current_id + '&ajax=json'
all_url.append(current_url)
"""得到某個(gè)欄目塊的url"""
def parse(self, response):
for i in range(0, len(self.all_url)):
print("第" + str(i) + "個(gè)欄目")
yield Request(self.all_url[i], callback=self.next)
"""某個(gè)模塊下面的所有的新聞的url"""
def next(self, response):
data = response.body.decode('utf-8', 'ignore')
# print(self.all_url)
partten1 = '"url":"(.*?)"'
partten2 = '"m_url":"(.*?)"'
url1 = re.compile(partten1, re.S).findall(data)
url2 = re.compile(partten2, re.S).findall(data)
if (len(url1) != 0):
url = url1
else:
url = url2
# print(url)
# print("===========================")
for i in range(0, len(url)):
thisurl = re.sub(r"\\\/", '/', url[i])
# print(thisurl)
yield Request(thisurl, callback=self.next2,dont_filter=True) # thisurl是返回的值,回調函數調next2去處理,
def next2(self, response):
item = BaidunewsItem()
item['link'] = response.url
item['title'] = response.xpath("/html/head/title/text()").extract()
item['content'] = response.body
yield item
這里總結幾點(diǎn)
1、代碼中yieldRequest()中的第一個(gè)參數是yield生成器返回的值,第二個(gè)callback=XXX是接下來(lái)要調用的參數
2、yield Request(thisurl, callback=self.next2,dont_filter=True) 如果不加dont_filter=True,則無(wú)法獲取返回項
3 教我的大佬解釋說(shuō),allowed_domains = [''] 我們里面這個(gè)參數是設置成在URL中收錄這個(gè)來(lái)獲取我們想要的信息,比如current_url = '#39; + current_id + '&ajax=json ' 而且我們的每個(gè)欄目塊下都沒(méi)有一條新聞。只有加上上面dont_filter=True的參數才能返回我們的item信息
3、我們可以編寫(xiě)管道來(lái)查看一些返回的項目
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/late ... .html
class BaidunewsPipeline(object):
def process_item(self, item, spider):
# print("===========================")
print(item["title"].decode('utf-8')+item['link']+item['content'])
return item
4 我們還需要在執行代碼之前在設置中注冊
# -*- coding: utf-8 -*-
# Scrapy settings for baidunews project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
BOT_NAME = 'baidunews'
SPIDER_MODULES = ['baidunews.spiders']
NEWSPIDER_MODULE = 'baidunews.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'baidunews (+http://www.yourdomain.com)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/late ... delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
#COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/late ... .html
#SPIDER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/late ... .html
#DOWNLOADER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsDownloaderMiddleware': 543,
#}
# Enable or disable extensions
# See https://doc.scrapy.org/en/late ... .html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/late ... .html
#注冊pipeline
ITEM_PIPELINES = {
'baidunews.pipelines.BaidunewsPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/late ... .html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/late ... tings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
5然后我們就可以在命令行窗口成功執行scrapy爬取新聞了
6 下面是我們的目錄結構
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(fildder抓包來(lái)分析這些新聞網(wǎng)址等信息隱藏在那個(gè)地方
)
先分析

打開(kāi)網(wǎng)站后,再打開(kāi)源碼,發(fā)現之前的一些新聞頭條在源碼中可以找到,而下面的頭條在源碼中找不到

這時(shí)候我們就需要使用fildder抓包來(lái)分析這些新聞的URL以及隱藏在那個(gè)地方的其他信息

這些有我們正在尋找的信息

我們復制網(wǎng)址在瀏覽器中打開(kāi)發(fā)現不是我們要找的源信息

復制這個(gè)url找到我們的源碼,比較兩個(gè)url的區別
t只是一個(gè)時(shí)間戳,我們將第二個(gè)URL改為
&ajax=json
我們可以通過(guò)上面的網(wǎng)址訪(fǎng)問(wèn)源代碼
我們受到下面藍色網(wǎng)址的啟發(fā),只需要通過(guò)以上網(wǎng)址的拼接來(lái)獲取我們的源代碼

1、首先定義我們要爬取哪些字段。這是在 items 中定義的
import scrapy
class BaidunewsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# pass
"""1定義爬取的東西"""
title=scrapy.Field()
link=scrapy.Field()
content=scrapy.Field()
2、編寫(xiě)爬蟲(chóng)文件
# -*- coding: utf-8 -*-
import scrapy
from baidunews.items import BaidunewsItem
from scrapy.http import Request
import re
class NewsSpider(scrapy.Spider):
name = 'news'
allowed_domains = ['news.baidu.com']
start_urls = ['http://news.baidu.com/widget%3 ... 39%3B]
all_id = ['LocalNews', 'civilnews', 'InternationalNews', 'EnterNews', 'SportNews', 'FinanceNews', 'TechNews',
'MilitaryNews', 'InternetNews', 'DiscoveryNews', 'LadyNews', 'HealthNews', 'PicWall']
all_url = []
for i in range(len(all_id)):
current_id = all_id[i]
current_url = 'http://news.baidu.com/widget?id=' + current_id + '&ajax=json'
all_url.append(current_url)
"""得到某個(gè)欄目塊的url"""
def parse(self, response):
for i in range(0, len(self.all_url)):
print("第" + str(i) + "個(gè)欄目")
yield Request(self.all_url[i], callback=self.next)
"""某個(gè)模塊下面的所有的新聞的url"""
def next(self, response):
data = response.body.decode('utf-8', 'ignore')
# print(self.all_url)
partten1 = '"url":"(.*?)"'
partten2 = '"m_url":"(.*?)"'
url1 = re.compile(partten1, re.S).findall(data)
url2 = re.compile(partten2, re.S).findall(data)
if (len(url1) != 0):
url = url1
else:
url = url2
# print(url)
# print("===========================")
for i in range(0, len(url)):
thisurl = re.sub(r"\\\/", '/', url[i])
# print(thisurl)
yield Request(thisurl, callback=self.next2,dont_filter=True) # thisurl是返回的值,回調函數調next2去處理,
def next2(self, response):
item = BaidunewsItem()
item['link'] = response.url
item['title'] = response.xpath("/html/head/title/text()").extract()
item['content'] = response.body
yield item
這里總結幾點(diǎn)
1、代碼中yieldRequest()中的第一個(gè)參數是yield生成器返回的值,第二個(gè)callback=XXX是接下來(lái)要調用的參數
2、yield Request(thisurl, callback=self.next2,dont_filter=True) 如果不加dont_filter=True,則無(wú)法獲取返回項
3 教我的大佬解釋說(shuō),allowed_domains = [''] 我們里面這個(gè)參數是設置成在URL中收錄這個(gè)來(lái)獲取我們想要的信息,比如current_url = '#39; + current_id + '&ajax=json ' 而且我們的每個(gè)欄目塊下都沒(méi)有一條新聞。只有加上上面dont_filter=True的參數才能返回我們的item信息
3、我們可以編寫(xiě)管道來(lái)查看一些返回的項目
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/late ... .html
class BaidunewsPipeline(object):
def process_item(self, item, spider):
# print("===========================")
print(item["title"].decode('utf-8')+item['link']+item['content'])
return item
4 我們還需要在執行代碼之前在設置中注冊
# -*- coding: utf-8 -*-
# Scrapy settings for baidunews project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
BOT_NAME = 'baidunews'
SPIDER_MODULES = ['baidunews.spiders']
NEWSPIDER_MODULE = 'baidunews.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'baidunews (+http://www.yourdomain.com)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/late ... delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
#COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/late ... .html
#SPIDER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/late ... .html
#DOWNLOADER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsDownloaderMiddleware': 543,
#}
# Enable or disable extensions
# See https://doc.scrapy.org/en/late ... .html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/late ... .html
#注冊pipeline
ITEM_PIPELINES = {
'baidunews.pipelines.BaidunewsPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/late ... .html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/late ... tings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
5然后我們就可以在命令行窗口成功執行scrapy爬取新聞了
6 下面是我們的目錄結構

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 63 次瀏覽 ? 2022-02-16 05:20
)
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社,鄭秋生,夏九杰主編)爬蟲(chóng)應用——抓取百度圖片
本文使用請求庫抓取某網(wǎng)站的圖片。前面的博客章節介紹了如何使用 urllib 庫來(lái)爬取網(wǎng)頁(yè)。本文主要使用請求庫來(lái)抓取網(wǎng)頁(yè)內容。使用方法 基本一樣,但是請求方法比較簡(jiǎn)單
不要忘記爬蟲(chóng)的基本思想:
1.指定要爬取的鏈接,然后爬取網(wǎng)站源碼
2.提取你想要的內容,比如如果要爬取圖片信息,可以選擇用正則表達式過(guò)濾或者使用提取
標簽方法
3.循環(huán)獲取要爬取的內容列表并保存文件
這里的代碼和我博客前幾章的代碼(圖片爬蟲(chóng)系列一)的區別是:
1.reques庫用于提取網(wǎng)頁(yè)
2.保存圖片時(shí),后綴不固定使用png或jpg,而是圖片本身的后綴名
3.保存圖片時(shí)不使用urllib.request.urlretrieve函數,而是使用文件讀寫(xiě)操作保存圖片
具體代碼如下圖所示:
# 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { 'User-Agent': 'MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0' } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = 'UTF-8' # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all('img') x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get('src') # 排除 src='' 的情況 if imgUrl_src != '': print('正在下載第 %d : %s 張圖片' % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = 'https://www.hqu.edu.cn/' + imgUrl_src print('正在下載:%s' % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 '.jpg' p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, 'wb').write(ir.content) x = x + 1 except: continueif __name__ == '__main__': # 指定爬取圖片鏈接 url = 'https://www.hqu.edu.cn/index.htm' # 指定存儲圖片路徑 localPath = './img/' # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
注意我們之所以判斷圖片鏈接是否以“https://”開(kāi)頭,主要是因為我們需要一個(gè)完整的絕對路徑來(lái)下載圖片,而這個(gè)需要看網(wǎng)頁(yè)原代碼,選擇一個(gè)圖片,然后點(diǎn)擊html所在的代碼。 ,按住鼠標,可以看到絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖:
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生)
)
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社,鄭秋生,夏九杰主編)爬蟲(chóng)應用——抓取百度圖片
本文使用請求庫抓取某網(wǎng)站的圖片。前面的博客章節介紹了如何使用 urllib 庫來(lái)爬取網(wǎng)頁(yè)。本文主要使用請求庫來(lái)抓取網(wǎng)頁(yè)內容。使用方法 基本一樣,但是請求方法比較簡(jiǎn)單
不要忘記爬蟲(chóng)的基本思想:
1.指定要爬取的鏈接,然后爬取網(wǎng)站源碼
2.提取你想要的內容,比如如果要爬取圖片信息,可以選擇用正則表達式過(guò)濾或者使用提取
標簽方法
3.循環(huán)獲取要爬取的內容列表并保存文件
這里的代碼和我博客前幾章的代碼(圖片爬蟲(chóng)系列一)的區別是:
1.reques庫用于提取網(wǎng)頁(yè)
2.保存圖片時(shí),后綴不固定使用png或jpg,而是圖片本身的后綴名
3.保存圖片時(shí)不使用urllib.request.urlretrieve函數,而是使用文件讀寫(xiě)操作保存圖片
具體代碼如下圖所示:
# 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { 'User-Agent': 'MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0' } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = 'UTF-8' # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all('img') x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get('src') # 排除 src='' 的情況 if imgUrl_src != '': print('正在下載第 %d : %s 張圖片' % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = 'https://www.hqu.edu.cn/' + imgUrl_src print('正在下載:%s' % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 '.jpg' p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, 'wb').write(ir.content) x = x + 1 except: continueif __name__ == '__main__': # 指定爬取圖片鏈接 url = 'https://www.hqu.edu.cn/index.htm' # 指定存儲圖片路徑 localPath = './img/' # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
注意我們之所以判斷圖片鏈接是否以“https://”開(kāi)頭,主要是因為我們需要一個(gè)完整的絕對路徑來(lái)下載圖片,而這個(gè)需要看網(wǎng)頁(yè)原代碼,選擇一個(gè)圖片,然后點(diǎn)擊html所在的代碼。 ,按住鼠標,可以看到絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖:

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(#第一次學(xué)習爬蟲(chóng)后,自己編碼抓取圖片' )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 70 次瀏覽 ? 2022-02-16 05:11
)
#第一次學(xué)爬蟲(chóng)后,自己編碼和抓圖
##下面介紹主要流程
先打開(kāi)一個(gè)你要抓圖的網(wǎng)頁(yè),我以''為例|
url = 'https://www.quanjing.com/creat ... 39%3B
2.然后閱讀網(wǎng)頁(yè)的源碼,我們可以在源碼中找到我們要抓取的圖片對應的鏈接|
這里可能有人文,網(wǎng)頁(yè)的源代碼在哪里?
答:右鍵找到網(wǎng)頁(yè)源代碼,或者直接F12
html = urllib.request.urlopen(url).read().decode('utf-8')
運行后,我們可以看到鏈接抓取成功,都是以列表的形式抓取的:
3.下面使用 urllib.request.urlretrieve(url, 'target address')
要從對應鏈接下載圖片,首先要把上面得到的字符串形式轉換成不帶“”的鏈接
html1 = i.replace('"','')``
4.批量下載到本地
```python
for i in page_list:
html1 = i.replace('"','')
print(html1)
global x
urllib.request.urlretrieve(html1, 'image\%s.jpg' % x)
x+=1
這里保存到py文件對應目錄下的image文件中
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(#第一次學(xué)習爬蟲(chóng)后,自己編碼抓取圖片'
)
#第一次學(xué)爬蟲(chóng)后,自己編碼和抓圖
##下面介紹主要流程
先打開(kāi)一個(gè)你要抓圖的網(wǎng)頁(yè),我以''為例|
url = 'https://www.quanjing.com/creat ... 39%3B
2.然后閱讀網(wǎng)頁(yè)的源碼,我們可以在源碼中找到我們要抓取的圖片對應的鏈接|
這里可能有人文,網(wǎng)頁(yè)的源代碼在哪里?
答:右鍵找到網(wǎng)頁(yè)源代碼,或者直接F12
html = urllib.request.urlopen(url).read().decode('utf-8')
運行后,我們可以看到鏈接抓取成功,都是以列表的形式抓取的:

3.下面使用 urllib.request.urlretrieve(url, 'target address')
要從對應鏈接下載圖片,首先要把上面得到的字符串形式轉換成不帶“”的鏈接
html1 = i.replace('"','')``
4.批量下載到本地
```python
for i in page_list:
html1 = i.replace('"','')
print(html1)
global x
urllib.request.urlretrieve(html1, 'image\%s.jpg' % x)
x+=1
這里保存到py文件對應目錄下的image文件中

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(在python學(xué)習之路(10):爬蟲(chóng)進(jìn)階,使用python爬取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 84 次瀏覽 ? 2022-02-14 08:11
python學(xué)習之路(一0):高級爬蟲(chóng),用python爬取你喜歡的小說(shuō)
在這個(gè) 文章 中,我們使用 BeautifulSoup 爬取了一本小說(shuō)。這是學(xué)習BeautifulSoup后寫(xiě)的第一個(gè)小程序,但是感覺(jué)自己對BeautifulSoup的使用不夠熟練,所以再寫(xiě)一個(gè)爬蟲(chóng)。增強 BeautifulSoup 的使用。
本次抓取微信公眾號的文章標題、文章摘要、文章網(wǎng)址、文章封面圖片網(wǎng)址、公眾號名稱(chēng)等信息。
python學(xué)習之路(12):連接Mysql數據庫及簡(jiǎn)單的增刪改查查詢(xún)回滾操作)
在這個(gè)文章中,我們談到了mysql的使用,所以這次我們將抓取的數據存儲在數據庫中。
我們不應該忘記我們以前學(xué)過(guò)的知識。我們應該把以前學(xué)過(guò)的東西都應用到現在的學(xué)習中,這樣可以讓我們復習舊知識,更牢牢地掌握知識點(diǎn)。
微信文章捕獲的地址為:
這是搜狗微信的搜索頁(yè)面,里面的文章每隔幾個(gè)小時(shí)就會(huì )更新一次。所以在這里抓取 文章 是相當全面的。
想法
1、 研究網(wǎng)頁(yè)結構
2、 使用 BeautifulSoup 解析我們需要的信息
3、 將解析后的信息存入mysql數據庫
學(xué)習網(wǎng)絡(luò )結構
研究網(wǎng)頁(yè)的結構,當然是右鍵->檢查元素
但是很快我發(fā)現了一個(gè)問(wèn)題,每個(gè)頁(yè)面只有20篇微信文章文章,要查看更多,我必須點(diǎn)擊“加載更多”按鈕。首先想了一下能不能用python來(lái)點(diǎn)擊,但是網(wǎng)上找的方法太深奧了,對python的學(xué)習還沒(méi)有深入,所以決定換一種方式。
懂一點(diǎn)JS的人都知道,如果是做“加載更多”之類(lèi)的功能,就必須使用AJAX向服務(wù)器請求新的數據,所以在我點(diǎn)擊“加載更多”按鈕后,我使用了瀏覽器的網(wǎng)絡(luò )看到這個(gè)請求。
我猜這一定是請求新數據的接口,我們打開(kāi)看看
哈哈,這個(gè)頁(yè)面也是微信文章的頁(yè)面,簡(jiǎn)單多了,大大降低了我們分析的難度。
并且發(fā)現了另一種模式。此 URL 以 1.html 結尾。
如果我把它改成 2.html
哈哈,神奇的發(fā)現改成2.html還是可以訪(fǎng)問(wèn)的,所以我大膽猜測,這應該是頁(yè)數的意思。
我在上面的 URL 中發(fā)現的另一個(gè)有趣的事情是有一個(gè) PC_0。
所以我決定把它改成 pc_1 試試看。
還能訪(fǎng)問(wèn),看到這邊的信息讓我覺(jué)得這是不是文章的另一類(lèi)。
在審查了元素之后,這證實(shí)了我的懷疑。
經(jīng)過(guò)以上研究,以下地址
可以得出兩個(gè)結論:
1、后面的1.html是頁(yè)數,不同的數字代表不同的頁(yè)數。
2、 后面pc_0中的0代表分類(lèi),不同的數字代表不同的類(lèi)型。
有了這兩個(gè)結論,我們寫(xiě)一個(gè)抓微信文章的代碼就簡(jiǎn)單多了。
這個(gè)文章就寫(xiě)到這里了,后面我會(huì )根據這個(gè)文章得到的結論來(lái)談抓數據,因為我在研究這個(gè)網(wǎng)頁(yè)的時(shí)候也在寫(xiě)這個(gè)文章。我也寫(xiě)了代碼。這個(gè)文章會(huì )先解釋一下研究一個(gè)網(wǎng)頁(yè)的思路。等我把代碼寫(xiě)好整理后,分享給大家。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(在python學(xué)習之路(10):爬蟲(chóng)進(jìn)階,使用python爬取)
python學(xué)習之路(一0):高級爬蟲(chóng),用python爬取你喜歡的小說(shuō)
在這個(gè) 文章 中,我們使用 BeautifulSoup 爬取了一本小說(shuō)。這是學(xué)習BeautifulSoup后寫(xiě)的第一個(gè)小程序,但是感覺(jué)自己對BeautifulSoup的使用不夠熟練,所以再寫(xiě)一個(gè)爬蟲(chóng)。增強 BeautifulSoup 的使用。
本次抓取微信公眾號的文章標題、文章摘要、文章網(wǎng)址、文章封面圖片網(wǎng)址、公眾號名稱(chēng)等信息。
python學(xué)習之路(12):連接Mysql數據庫及簡(jiǎn)單的增刪改查查詢(xún)回滾操作)
在這個(gè)文章中,我們談到了mysql的使用,所以這次我們將抓取的數據存儲在數據庫中。
我們不應該忘記我們以前學(xué)過(guò)的知識。我們應該把以前學(xué)過(guò)的東西都應用到現在的學(xué)習中,這樣可以讓我們復習舊知識,更牢牢地掌握知識點(diǎn)。
微信文章捕獲的地址為:
這是搜狗微信的搜索頁(yè)面,里面的文章每隔幾個(gè)小時(shí)就會(huì )更新一次。所以在這里抓取 文章 是相當全面的。
想法
1、 研究網(wǎng)頁(yè)結構
2、 使用 BeautifulSoup 解析我們需要的信息
3、 將解析后的信息存入mysql數據庫
學(xué)習網(wǎng)絡(luò )結構
研究網(wǎng)頁(yè)的結構,當然是右鍵->檢查元素
但是很快我發(fā)現了一個(gè)問(wèn)題,每個(gè)頁(yè)面只有20篇微信文章文章,要查看更多,我必須點(diǎn)擊“加載更多”按鈕。首先想了一下能不能用python來(lái)點(diǎn)擊,但是網(wǎng)上找的方法太深奧了,對python的學(xué)習還沒(méi)有深入,所以決定換一種方式。
懂一點(diǎn)JS的人都知道,如果是做“加載更多”之類(lèi)的功能,就必須使用AJAX向服務(wù)器請求新的數據,所以在我點(diǎn)擊“加載更多”按鈕后,我使用了瀏覽器的網(wǎng)絡(luò )看到這個(gè)請求。
我猜這一定是請求新數據的接口,我們打開(kāi)看看
哈哈,這個(gè)頁(yè)面也是微信文章的頁(yè)面,簡(jiǎn)單多了,大大降低了我們分析的難度。
并且發(fā)現了另一種模式。此 URL 以 1.html 結尾。
如果我把它改成 2.html
哈哈,神奇的發(fā)現改成2.html還是可以訪(fǎng)問(wèn)的,所以我大膽猜測,這應該是頁(yè)數的意思。
我在上面的 URL 中發(fā)現的另一個(gè)有趣的事情是有一個(gè) PC_0。
所以我決定把它改成 pc_1 試試看。
還能訪(fǎng)問(wèn),看到這邊的信息讓我覺(jué)得這是不是文章的另一類(lèi)。
在審查了元素之后,這證實(shí)了我的懷疑。
經(jīng)過(guò)以上研究,以下地址
可以得出兩個(gè)結論:
1、后面的1.html是頁(yè)數,不同的數字代表不同的頁(yè)數。
2、 后面pc_0中的0代表分類(lèi),不同的數字代表不同的類(lèi)型。
有了這兩個(gè)結論,我們寫(xiě)一個(gè)抓微信文章的代碼就簡(jiǎn)單多了。
這個(gè)文章就寫(xiě)到這里了,后面我會(huì )根據這個(gè)文章得到的結論來(lái)談抓數據,因為我在研究這個(gè)網(wǎng)頁(yè)的時(shí)候也在寫(xiě)這個(gè)文章。我也寫(xiě)了代碼。這個(gè)文章會(huì )先解釋一下研究一個(gè)網(wǎng)頁(yè)的思路。等我把代碼寫(xiě)好整理后,分享給大家。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用Jsoup解析img標簽并提取里面的title和data-original屬性 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-02-08 00:14
)
大家好,我是小北。
在普通的群聊中,有時(shí)會(huì )遇到那種欺負人。如果你不同意,你會(huì )開(kāi)始談?wù)撽庩?yáng)并發(fā)送各種表情符號。但是,你的微信表情總是一點(diǎn)點(diǎn),不夠個(gè)性,上網(wǎng)去百度太麻煩了。本文文章根據emoji中的關(guān)鍵詞網(wǎng)站下載emoji到本地,讓黑幫遠離你。
本文使用java的OKHttp框架作為爬蟲(chóng)抓取“post emoji”網(wǎng)站()的表情包,使用Jsoup框架解析抓取到的網(wǎng)頁(yè)。
馬文
OKHttp是一個(gè)優(yōu)秀的網(wǎng)絡(luò )請求框架,可以請求http、https、get()、post()、put()等請求方法。Jsoup是一個(gè)解析網(wǎng)頁(yè)的框架,可以像JS一樣使用。
com.squareup.okhttp3
okhttp
4.9.3
org.jsoup
jsoup
1.14.3
思路分析
打開(kāi)網(wǎng)站,搜索關(guān)鍵字[Loading Force]的表情包,打開(kāi)F12控制面板,可以看到每個(gè)表情包都收錄在div元素中,翻的時(shí)候可以讀取url地址這一頁(yè)??梢钥吹降谝豁?yè)最后一個(gè)數字是1,第二頁(yè)是2,第三頁(yè)是3。這個(gè)很容易做到,只需要改變數字即可。
String url = String.format("https://fabiaoqing.com/search/ ... ot%3B, "裝逼", 1);
public Request buildRequest(String url) {
Request request = new Request.Builder()
.url(url)
.build();
return request;
}
public Response getResponse( Request request) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
response = client.newCall(request).execute();
System.out.println(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
繼續查看網(wǎng)頁(yè)源碼,表情圖片隱藏在div層下的img表情中,使用Jsoup解析img標簽,提取里面的title和data-original屬性,作為文件名和內容圖片。
Map map = new HashMap();
Document document = Jsoup.parse(html);
Elements elements = document.getElementsByClass("ui image bqppsearch lazy");
for (Element element : elements) {
Attributes attributes = element.attributes();
String key = attributes.get("title").replaceAll("\\n", "").replaceAll("[/\\\\\\\\:*?|\\\"]", "");
String value = attributes.get("data-original");
map.put(key, value);
} 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用Jsoup解析img標簽并提取里面的title和data-original屬性
)
大家好,我是小北。

在普通的群聊中,有時(shí)會(huì )遇到那種欺負人。如果你不同意,你會(huì )開(kāi)始談?wù)撽庩?yáng)并發(fā)送各種表情符號。但是,你的微信表情總是一點(diǎn)點(diǎn),不夠個(gè)性,上網(wǎng)去百度太麻煩了。本文文章根據emoji中的關(guān)鍵詞網(wǎng)站下載emoji到本地,讓黑幫遠離你。
本文使用java的OKHttp框架作為爬蟲(chóng)抓取“post emoji”網(wǎng)站()的表情包,使用Jsoup框架解析抓取到的網(wǎng)頁(yè)。
馬文
OKHttp是一個(gè)優(yōu)秀的網(wǎng)絡(luò )請求框架,可以請求http、https、get()、post()、put()等請求方法。Jsoup是一個(gè)解析網(wǎng)頁(yè)的框架,可以像JS一樣使用。
com.squareup.okhttp3
okhttp
4.9.3
org.jsoup
jsoup
1.14.3
思路分析
打開(kāi)網(wǎng)站,搜索關(guān)鍵字[Loading Force]的表情包,打開(kāi)F12控制面板,可以看到每個(gè)表情包都收錄在div元素中,翻的時(shí)候可以讀取url地址這一頁(yè)??梢钥吹降谝豁?yè)最后一個(gè)數字是1,第二頁(yè)是2,第三頁(yè)是3。這個(gè)很容易做到,只需要改變數字即可。

String url = String.format("https://fabiaoqing.com/search/ ... ot%3B, "裝逼", 1);
public Request buildRequest(String url) {
Request request = new Request.Builder()
.url(url)
.build();
return request;
}
public Response getResponse( Request request) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
response = client.newCall(request).execute();
System.out.println(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
繼續查看網(wǎng)頁(yè)源碼,表情圖片隱藏在div層下的img表情中,使用Jsoup解析img標簽,提取里面的title和data-original屬性,作為文件名和內容圖片。

Map map = new HashMap();
Document document = Jsoup.parse(html);
Elements elements = document.getElementsByClass("ui image bqppsearch lazy");
for (Element element : elements) {
Attributes attributes = element.attributes();
String key = attributes.get("title").replaceAll("\\n", "").replaceAll("[/\\\\\\\\:*?|\\\"]", "");
String value = attributes.get("data-original");
map.put(key, value);
}
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 網(wǎng)站怎么做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞、方法和優(yōu)化技巧)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-02-26 15:18
網(wǎng)站怎么做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞、方法和優(yōu)化技巧)
百度 收錄 請求 - 為什么百度沒(méi)有索引您的 網(wǎng)站
網(wǎng)站添加阿里媽媽廣告導致百度收錄少或沒(méi)有收錄!如果一定要改程序,建議你徹底關(guān)閉網(wǎng)站1個(gè)月后再重新上傳你的程序,這樣百度會(huì )認為你是新站點(diǎn),網(wǎng)站會(huì )容易很多@收錄。因為cn域名比較便宜,很多人用cn域名做垃圾郵件網(wǎng)站,影響百度很多cn自有網(wǎng)頁(yè)收錄少或沒(méi)有收錄!...
網(wǎng)站如何做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞,方法和優(yōu)化技巧!
今天就和大家聊聊網(wǎng)站、網(wǎng)站關(guān)鍵詞分類(lèi)優(yōu)化中最重要的一項。那么接下來(lái)就講講網(wǎng)站優(yōu)化關(guān)鍵詞的分類(lèi)方法、優(yōu)化技巧!那么網(wǎng)站關(guān)鍵詞怎么分類(lèi)呢?4、brands關(guān)鍵詞:一般設置在每頁(yè)標題的最后,是網(wǎng)站關(guān)鍵詞的唯一性,也是常見(jiàn)的建立品牌的方式品牌。2、根據網(wǎng)站優(yōu)化:關(guān)鍵詞大致可以分為核心詞、需求詞、品牌詞。網(wǎng)站關(guān)鍵詞有哪些優(yōu)化技巧...
什么是 SEO 內部鏈接和外部鏈接 - 外部鏈接和內部鏈接有什么區別?
什么是外部鏈接?例如,百度是一個(gè)常見(jiàn)的外部鏈接。什么是內部鏈接?面比較重要,可以先抓收錄。有了內部鏈接和外部鏈接的解釋?zhuān)呀?jīng)知道了外部鏈接和內部鏈接的區別。垃圾網(wǎng)站你也投票,那你的投票權就會(huì )越來(lái)越小。做外鏈和內鏈需要注意什么?所以一個(gè)好的網(wǎng)站必須有很多外部鏈接。沒(méi)有投票,所以你在論壇上發(fā)帖是沒(méi)有用的??焖僭鲩L(cháng)或快速...
SEO優(yōu)化的優(yōu)勢——SEO優(yōu)化和SEM競價(jià)的優(yōu)缺點(diǎn)和區別
PPC的優(yōu)缺點(diǎn):搜索引擎優(yōu)化的優(yōu)缺點(diǎn):1、價(jià)格低,網(wǎng)站維持排名一年的成本可能只做一到兩個(gè)月,競價(jià)是比較便宜很多。3、手機、MP3等難以區分和競爭關(guān)鍵詞,排名難優(yōu)化,時(shí)間長(cháng),價(jià)格高,太難的話(huà)不適合優(yōu)化。通過(guò)對以上優(yōu)缺點(diǎn)的總結和分析,網(wǎng)站優(yōu)化的整體效果遠勝于競品排名,價(jià)格也優(yōu)于競品…… 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
網(wǎng)站怎么做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞、方法和優(yōu)化技巧)

百度 收錄 請求 - 為什么百度沒(méi)有索引您的 網(wǎng)站
網(wǎng)站添加阿里媽媽廣告導致百度收錄少或沒(méi)有收錄!如果一定要改程序,建議你徹底關(guān)閉網(wǎng)站1個(gè)月后再重新上傳你的程序,這樣百度會(huì )認為你是新站點(diǎn),網(wǎng)站會(huì )容易很多@收錄。因為cn域名比較便宜,很多人用cn域名做垃圾郵件網(wǎng)站,影響百度很多cn自有網(wǎng)頁(yè)收錄少或沒(méi)有收錄!...

網(wǎng)站如何做SEO關(guān)鍵詞-如何分類(lèi)網(wǎng)站優(yōu)化關(guān)鍵詞,方法和優(yōu)化技巧!
今天就和大家聊聊網(wǎng)站、網(wǎng)站關(guān)鍵詞分類(lèi)優(yōu)化中最重要的一項。那么接下來(lái)就講講網(wǎng)站優(yōu)化關(guān)鍵詞的分類(lèi)方法、優(yōu)化技巧!那么網(wǎng)站關(guān)鍵詞怎么分類(lèi)呢?4、brands關(guān)鍵詞:一般設置在每頁(yè)標題的最后,是網(wǎng)站關(guān)鍵詞的唯一性,也是常見(jiàn)的建立品牌的方式品牌。2、根據網(wǎng)站優(yōu)化:關(guān)鍵詞大致可以分為核心詞、需求詞、品牌詞。網(wǎng)站關(guān)鍵詞有哪些優(yōu)化技巧...
什么是 SEO 內部鏈接和外部鏈接 - 外部鏈接和內部鏈接有什么區別?
什么是外部鏈接?例如,百度是一個(gè)常見(jiàn)的外部鏈接。什么是內部鏈接?面比較重要,可以先抓收錄。有了內部鏈接和外部鏈接的解釋?zhuān)呀?jīng)知道了外部鏈接和內部鏈接的區別。垃圾網(wǎng)站你也投票,那你的投票權就會(huì )越來(lái)越小。做外鏈和內鏈需要注意什么?所以一個(gè)好的網(wǎng)站必須有很多外部鏈接。沒(méi)有投票,所以你在論壇上發(fā)帖是沒(méi)有用的??焖僭鲩L(cháng)或快速...

SEO優(yōu)化的優(yōu)勢——SEO優(yōu)化和SEM競價(jià)的優(yōu)缺點(diǎn)和區別
PPC的優(yōu)缺點(diǎn):搜索引擎優(yōu)化的優(yōu)缺點(diǎn):1、價(jià)格低,網(wǎng)站維持排名一年的成本可能只做一到兩個(gè)月,競價(jià)是比較便宜很多。3、手機、MP3等難以區分和競爭關(guān)鍵詞,排名難優(yōu)化,時(shí)間長(cháng),價(jià)格高,太難的話(huà)不適合優(yōu)化。通過(guò)對以上優(yōu)缺點(diǎn)的總結和分析,網(wǎng)站優(yōu)化的整體效果遠勝于競品排名,價(jià)格也優(yōu)于競品……
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)項目學(xué)習之爬取地址特點(diǎn)通過(guò)右鍵的分析方法(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 368 次瀏覽 ? 2022-02-26 10:23
1、總結
目的:學(xué)習爬蟲(chóng)項目,使用requests方法爬取百度貼吧美容吧每篇帖子的圖片,并保存在本地。
方法:首先通過(guò)requests請求美容吧網(wǎng)頁(yè)的內容;二、通過(guò)xpath方法清理數據,獲取每個(gè)post的url地址;再次請求每個(gè)帖子的地址,從每個(gè)帖子地址爬取圖片鏈接;最后,請求圖像數據并將數據以二進(jìn)制格式保存在本地。
2、網(wǎng)頁(yè)分析
如下圖,這是本次爬取的目標網(wǎng)站,百度美吧,要求:爬取每個(gè)帖子里的圖片,保存到本地。爬取網(wǎng)站首先需要分析網(wǎng)站的特征。需要分析的內容包括:網(wǎng)站頁(yè)面的特征、post url地址的特征、圖片鏈接地址的獲取方式。以下是我需要分析的內容:
2.1 美容吧網(wǎng)頁(yè)特色
美容棒:%E7%BE%8E%E5%A5%B3&ie=utf-8&pn=0
觀(guān)察可以看出kw為搜索內容,pn為頁(yè)碼,第一頁(yè)為0,第二頁(yè)為50,所以頁(yè)碼的公式為pn=(頁(yè)數-1)*50。
2.2 Post url 地址功能
通過(guò)右鍵-勾選,可以查看網(wǎng)頁(yè)的源代碼信息,從中我們可以定位到每個(gè)帖子的代碼,如下圖:
可以看到,點(diǎn)擊“我真的很漂亮”的帖子,定位到代碼,可見(jiàn)帖子的url地址在這段代碼中;然后點(diǎn)擊href =p/6593341944,發(fā)現跳轉到帖子“我真的很漂亮”太漂亮了,此時(shí)的url地址是:,所以可以發(fā)現帖子的地址主要是由兩部分組成:+href的內容,所以我們只需要爬取href =p/6593341944的內容,然后拼接,就可以得到每個(gè)帖子的地址。
通過(guò)xpath_help工具,寫(xiě): //div[@class="threadlist_title pull_left j_th_tit "]/a/@href 得到每個(gè)url地址的一部分。
2.3 獲取帖子的圖片鏈接
獲取每個(gè)帖子的鏈接,通過(guò)類(lèi)似操作找到帖子中圖片的鏈接地址,如下圖定位到圖片的鏈接
同理,通過(guò)xpath_help匹配圖片鏈接,代碼為://img[@class="BDE_Image"]/@src
3、程序代碼:
# -*- 編碼:utf-8 -*-import requestsfrom lxml import etreeimport os#爬蟲(chóng)類(lèi)BtcSpider(object):def __init__(self):#爬取美女圖片#解析:美妝吧url地址,pn值決定頁(yè)碼, pn = 0 第一頁(yè), pn = 50 第二頁(yè)...self.url = '%E7%BE%8E%E5%A5%B3&ie=utf-8&pn={}'self.headers = { ' User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',}os.makedirs('美顏圖片',exist_ok=True)self.dir = '美顏圖片\\'#發(fā)送請求def get_response(self,url):response = requests.get(url,headers = self.headers)data = response.textreturn data#發(fā)送請求獲取網(wǎng)頁(yè)數據,數據以二進(jìn)制內容形式讀取 def get_data(self,url) :data = requests.get(url,headers = self.headers).contentreturn data#parse data, 封裝 xpathdef get_xpath(self,html,pattern):#build tree p = etree.HTML(html)#解析網(wǎng)頁(yè)內容,獲取url_listsresult = p.xpath(pattern)return result#下載圖片 &def download_src(self,url):html = self.get_response(url)html = html.replace ("
內容 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)項目學(xué)習之爬取地址特點(diǎn)通過(guò)右鍵的分析方法(圖))
1、總結
目的:學(xué)習爬蟲(chóng)項目,使用requests方法爬取百度貼吧美容吧每篇帖子的圖片,并保存在本地。
方法:首先通過(guò)requests請求美容吧網(wǎng)頁(yè)的內容;二、通過(guò)xpath方法清理數據,獲取每個(gè)post的url地址;再次請求每個(gè)帖子的地址,從每個(gè)帖子地址爬取圖片鏈接;最后,請求圖像數據并將數據以二進(jìn)制格式保存在本地。
2、網(wǎng)頁(yè)分析
如下圖,這是本次爬取的目標網(wǎng)站,百度美吧,要求:爬取每個(gè)帖子里的圖片,保存到本地。爬取網(wǎng)站首先需要分析網(wǎng)站的特征。需要分析的內容包括:網(wǎng)站頁(yè)面的特征、post url地址的特征、圖片鏈接地址的獲取方式。以下是我需要分析的內容:
2.1 美容吧網(wǎng)頁(yè)特色
美容棒:%E7%BE%8E%E5%A5%B3&ie=utf-8&pn=0
觀(guān)察可以看出kw為搜索內容,pn為頁(yè)碼,第一頁(yè)為0,第二頁(yè)為50,所以頁(yè)碼的公式為pn=(頁(yè)數-1)*50。
2.2 Post url 地址功能
通過(guò)右鍵-勾選,可以查看網(wǎng)頁(yè)的源代碼信息,從中我們可以定位到每個(gè)帖子的代碼,如下圖:
可以看到,點(diǎn)擊“我真的很漂亮”的帖子,定位到代碼,可見(jiàn)帖子的url地址在這段代碼中;然后點(diǎn)擊href =p/6593341944,發(fā)現跳轉到帖子“我真的很漂亮”太漂亮了,此時(shí)的url地址是:,所以可以發(fā)現帖子的地址主要是由兩部分組成:+href的內容,所以我們只需要爬取href =p/6593341944的內容,然后拼接,就可以得到每個(gè)帖子的地址。
通過(guò)xpath_help工具,寫(xiě): //div[@class="threadlist_title pull_left j_th_tit "]/a/@href 得到每個(gè)url地址的一部分。
2.3 獲取帖子的圖片鏈接
獲取每個(gè)帖子的鏈接,通過(guò)類(lèi)似操作找到帖子中圖片的鏈接地址,如下圖定位到圖片的鏈接
同理,通過(guò)xpath_help匹配圖片鏈接,代碼為://img[@class="BDE_Image"]/@src
3、程序代碼:
# -*- 編碼:utf-8 -*-import requestsfrom lxml import etreeimport os#爬蟲(chóng)類(lèi)BtcSpider(object):def __init__(self):#爬取美女圖片#解析:美妝吧url地址,pn值決定頁(yè)碼, pn = 0 第一頁(yè), pn = 50 第二頁(yè)...self.url = '%E7%BE%8E%E5%A5%B3&ie=utf-8&pn={}'self.headers = { ' User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',}os.makedirs('美顏圖片',exist_ok=True)self.dir = '美顏圖片\\'#發(fā)送請求def get_response(self,url):response = requests.get(url,headers = self.headers)data = response.textreturn data#發(fā)送請求獲取網(wǎng)頁(yè)數據,數據以二進(jìn)制內容形式讀取 def get_data(self,url) :data = requests.get(url,headers = self.headers).contentreturn data#parse data, 封裝 xpathdef get_xpath(self,html,pattern):#build tree p = etree.HTML(html)#解析網(wǎng)頁(yè)內容,獲取url_listsresult = p.xpath(pattern)return result#下載圖片 &def download_src(self,url):html = self.get_response(url)html = html.replace ("
內容
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 爬蟲(chóng)通用爬蟲(chóng)技術(shù)框架爬蟲(chóng)系統的誕生蜘蛛爬蟲(chóng)系統)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 76 次瀏覽 ? 2022-02-25 19:13
爬蟲(chóng)通用爬蟲(chóng)技術(shù)框架爬蟲(chóng)系統的誕生蜘蛛爬蟲(chóng)系統)
干貨全流程| 入門(mén)級爬蟲(chóng)技術(shù)原理,這就夠了
爬蟲(chóng)系統的誕生
蜘蛛爬蟲(chóng)
一般搜索引擎的處理對象是互聯(lián)網(wǎng)頁(yè)面。目前,互聯(lián)網(wǎng)頁(yè)面數量已達100億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是:如何設計一個(gè)高效的下載系統,將如此海量的網(wǎng)頁(yè)數據傳輸到本地?;ヂ?lián)網(wǎng)網(wǎng)頁(yè)的鏡像備份在本地形成。
網(wǎng)絡(luò )爬蟲(chóng)可以發(fā)揮這樣的作用,完成這項艱巨的任務(wù)。它是搜索引擎系統中一個(gè)非常關(guān)鍵和基本的組件。本文主要介紹網(wǎng)絡(luò )爬蟲(chóng)相關(guān)的技術(shù)。雖然爬蟲(chóng)經(jīng)過(guò)幾十年的發(fā)展,在整體框架上已經(jīng)比較成熟,但隨著(zhù)互聯(lián)網(wǎng)的不斷發(fā)展,它們也面臨著(zhù)一些新的挑戰。
通用爬蟲(chóng)技術(shù)框架
爬蟲(chóng)系統首先從互聯(lián)網(wǎng)頁(yè)面中精心挑選一些網(wǎng)頁(yè),將這些網(wǎng)頁(yè)的鏈接地址作為種子URL,將這些種子放入待爬取的URL隊列中。爬蟲(chóng)依次讀取要爬取的URL,通過(guò)DNS Parse傳遞URL,將鏈接地址轉換為網(wǎng)站服務(wù)器對應的IP地址。然后把它和網(wǎng)頁(yè)的相對路徑名交給網(wǎng)頁(yè)下載器,網(wǎng)頁(yè)下載器負責下載網(wǎng)頁(yè)。對于下載到本地的網(wǎng)頁(yè),一方面是存儲在頁(yè)庫中,等待索引等后續處理;另一方面,將下載網(wǎng)頁(yè)的URL放入爬取隊列,記錄爬蟲(chóng)系統已經(jīng)下載的網(wǎng)頁(yè)URL,避免系統重復爬取。對于剛剛下載的網(wǎng)頁(yè),提取其中收錄的所有鏈接信息,并在下載的URL隊列中進(jìn)行檢查。如果發(fā)現該鏈接沒(méi)有被爬取,則將其放在待爬取的URL隊列的末尾。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。
常見(jiàn)爬蟲(chóng)架構
以上是一般爬蟲(chóng)的整體流程。從宏觀(guān)上看,動(dòng)態(tài)爬取過(guò)程中的爬蟲(chóng)與互聯(lián)網(wǎng)上所有網(wǎng)頁(yè)的關(guān)系可以概括為以下五個(gè)部分:
下載網(wǎng)頁(yè)的綁定:爬蟲(chóng)從互聯(lián)網(wǎng)上下載到本地索引的網(wǎng)頁(yè)的集合。
過(guò)期網(wǎng)頁(yè)組合:由于網(wǎng)頁(yè)數量較多,爬蟲(chóng)完成一輪完整的爬取需要較長(cháng)時(shí)間。在爬取過(guò)程中,很多下載的網(wǎng)頁(yè)可能已經(jīng)更新,導致過(guò)期。原因是互聯(lián)網(wǎng)上的網(wǎng)頁(yè)處于不斷動(dòng)態(tài)變化的過(guò)程中,很容易產(chǎn)生本地網(wǎng)頁(yè)內容與真實(shí)互聯(lián)網(wǎng)的不一致。
待下載網(wǎng)頁(yè)集合:URL隊列中待爬取的網(wǎng)頁(yè),這些網(wǎng)頁(yè)即將被爬蟲(chóng)下載。
已知網(wǎng)頁(yè)集合:這些網(wǎng)頁(yè)沒(méi)有被爬蟲(chóng)下載,也沒(méi)有出現在待爬取的URL隊列中。通過(guò)已經(jīng)爬取的網(wǎng)頁(yè)或者待爬取的URL隊列中的網(wǎng)頁(yè),總是可以通過(guò)鏈接關(guān)系找到它們。稍后會(huì )被爬蟲(chóng)抓取和索引。
未知網(wǎng)頁(yè)的集合:一些網(wǎng)頁(yè)無(wú)法被爬蟲(chóng)抓取,這些網(wǎng)頁(yè)構成了未知網(wǎng)頁(yè)的組合。實(shí)際上,這部分頁(yè)面占比很高。
互聯(lián)網(wǎng)頁(yè)面劃分
從理解爬蟲(chóng)的角度來(lái)看,以上對互聯(lián)網(wǎng)頁(yè)面的劃分有助于深入理解搜索引擎爬蟲(chóng)面臨的主要任務(wù)和挑戰。絕大多數爬蟲(chóng)系統都遵循上述流程,但并非所有爬蟲(chóng)系統都如此一致。根據具體的應用,爬蟲(chóng)系統在很多方面都有所不同。一般來(lái)說(shuō),爬蟲(chóng)系統可以分為以下三種。
批處理式爬蟲(chóng):批處理式爬蟲(chóng)的抓取范圍和目標比較明確。當爬蟲(chóng)達到這個(gè)設定的目標時(shí),它會(huì )停止爬取過(guò)程。至于具體的目標,可能不一樣,可能是設置爬取一定數量的網(wǎng)頁(yè),也可能是設置爬取時(shí)間等等,都不一樣。
增量爬蟲(chóng):與批量爬蟲(chóng)不同,增量爬蟲(chóng)會(huì )不斷地爬取。抓取到的網(wǎng)頁(yè)要定期更新,因為互聯(lián)網(wǎng)網(wǎng)頁(yè)在不斷變化,新網(wǎng)頁(yè)、網(wǎng)頁(yè)被刪除或網(wǎng)頁(yè)內容發(fā)生變化是常有的事,增量爬蟲(chóng)需要及時(shí)反映這種變化,所以在不斷的爬取過(guò)程,他們要么是在爬取新的網(wǎng)頁(yè),要么是在更新現有的網(wǎng)頁(yè)。常見(jiàn)的商業(yè)搜索引擎爬蟲(chóng)基本屬于這一類(lèi)。
垂直爬蟲(chóng):垂直爬蟲(chóng)專(zhuān)注于屬于特定行業(yè)的特定主題或網(wǎng)頁(yè)。比如健康網(wǎng)站,你只需要從互聯(lián)網(wǎng)頁(yè)面中找到健康相關(guān)的頁(yè)面內容,其他行業(yè)的內容是沒(méi)有的??紤]范圍。垂直爬蟲(chóng)最大的特點(diǎn)和難點(diǎn)之一是如何識別網(wǎng)頁(yè)內容是否屬于指定行業(yè)或主題。從節省系統資源的角度來(lái)看,下載后不可能屏蔽所有的互聯(lián)網(wǎng)頁(yè)面,這樣會(huì )造成資源的過(guò)度浪費。爬蟲(chóng)往往需要在爬取階段動(dòng)態(tài)識別某個(gè)URL是否與主題相關(guān),盡量不使用。爬取不相關(guān)的頁(yè)面以達到節省資源的目的。垂直搜索網(wǎng)站或垂直行業(yè)網(wǎng)站往往需要這種爬蟲(chóng)。
好的爬行動(dòng)物的特征
一個(gè)優(yōu)秀爬蟲(chóng)的特性可能針對不同的應用有不同的實(shí)現方式,但是一個(gè)實(shí)用的爬蟲(chóng)應該具備以下特性。
01高性能
互聯(lián)網(wǎng)上的網(wǎng)頁(yè)數量非常龐大。因此,爬蟲(chóng)的性能非常重要。這里的性能主要是指爬蟲(chóng)下載網(wǎng)頁(yè)的爬取速度。常用的評價(jià)方法是用爬蟲(chóng)每秒可以下載的網(wǎng)頁(yè)數量作為性能指標。單位時(shí)間內可以下載的網(wǎng)頁(yè)越多,爬蟲(chóng)的性能就越高。
為了提高爬蟲(chóng)的性能,設計時(shí)程序訪(fǎng)問(wèn)磁盤(pán)的操作方式和具體實(shí)現時(shí)數據結構的選擇至關(guān)重要。例如,對于待爬取的URL隊列和已爬取的URL隊列,由于URL的數量非常多,不同實(shí)現方式的性能非常重要。性能差異很大,所以高效的數據結構對爬蟲(chóng)性能影響很大。
02 可擴展性
即使單個(gè)爬蟲(chóng)的性能很高,將所有網(wǎng)頁(yè)下載到本地仍然需要很長(cháng)時(shí)間。為了盡可能地縮短爬取周期,爬蟲(chóng)系統應該具有良好的可擴展性,即很容易增加 Crawl 的服務(wù)器和爬蟲(chóng)的數量來(lái)實(shí)現這一點(diǎn)。
目前實(shí)用的大型網(wǎng)絡(luò )爬蟲(chóng)必須以分布式方式運行,即多臺服務(wù)器專(zhuān)門(mén)進(jìn)行爬蟲(chóng),每臺服務(wù)器部署多個(gè)爬蟲(chóng),每個(gè)爬蟲(chóng)多線(xiàn)程運行,以多種方式增加并發(fā)。對于大型搜索引擎服務(wù)商來(lái)說(shuō),數據中心也可能會(huì )部署在全球、不同區域,爬蟲(chóng)也被分配到不同的數據中心,這對于提升爬蟲(chóng)系統的整體性能非常有幫助。
03 魯棒性
當爬蟲(chóng)想要訪(fǎng)問(wèn)各種類(lèi)型的網(wǎng)站服務(wù)器時(shí),可能會(huì )遇到很多異常情況,比如網(wǎng)頁(yè)的HTML編碼不規則,被爬取的服務(wù)器突然崩潰,甚至出現爬蟲(chóng)陷阱。爬蟲(chóng)能夠正確處理各種異常情況是非常重要的,否則它可能會(huì )時(shí)不時(shí)停止工作,這是難以忍受的。
從另一個(gè)角度來(lái)說(shuō),假設爬蟲(chóng)程序在爬取過(guò)程中死掉了,或者爬蟲(chóng)所在的服務(wù)器宕機了,一個(gè)健壯的爬蟲(chóng)應該可以做到。當爬蟲(chóng)再次啟動(dòng)時(shí),它可以恢復之前爬取的內容和數據結構。不必每次都從頭開(kāi)始做所有的工作,這也是爬蟲(chóng)健壯性的體現。
04友善
爬蟲(chóng)的友好性有兩層含義:一是保護網(wǎng)站的部分隱私,二是減少被爬取的網(wǎng)站的網(wǎng)絡(luò )負載。爬蟲(chóng)爬取的對象是各種類(lèi)型的網(wǎng)站。對于網(wǎng)站的擁有者來(lái)說(shuō),有些內容不想被所有人搜索到,所以需要設置一個(gè)協(xié)議來(lái)告知爬蟲(chóng)哪些內容不是。允許爬行。目前,實(shí)現這一目標的主流方法有兩種:爬蟲(chóng)禁止協(xié)議和網(wǎng)頁(yè)禁止標記。
爬蟲(chóng)禁止協(xié)議是指網(wǎng)站的擁有者生成的指定文件robot.txt,放在網(wǎng)站服務(wù)器的根目錄下。該文件表示網(wǎng)站中哪些目錄下面的網(wǎng)頁(yè)不允許被爬蟲(chóng)爬取。在爬取網(wǎng)站的網(wǎng)頁(yè)之前,友好的爬蟲(chóng)必須先讀取robot.txt文件,并且不會(huì )下載被禁止爬取的網(wǎng)頁(yè)。
網(wǎng)頁(yè)禁止標簽一般在網(wǎng)頁(yè)的HTML代碼中通過(guò)添加metaimage-package">
索引網(wǎng)頁(yè)與互聯(lián)網(wǎng)網(wǎng)頁(yè)
爬取的本地網(wǎng)頁(yè)很可能發(fā)生了變化,或者被刪除,或者內容發(fā)生了變化,因為爬蟲(chóng)完成一輪爬取需要很長(cháng)時(shí)間,所以部分爬取的網(wǎng)頁(yè)肯定是過(guò)期的。因此,網(wǎng)頁(yè)庫中的過(guò)期數據越少,網(wǎng)頁(yè)的新鮮度就越好,對提升用戶(hù)體驗大有裨益。如果新穎性不好,搜索結果全是過(guò)時(shí)數據,或者網(wǎng)頁(yè)被刪除,用戶(hù)的內心感受可想而知。
盡管 Internet 上有很多網(wǎng)頁(yè),但每個(gè)網(wǎng)頁(yè)都有很大的不同。例如,騰訊和網(wǎng)易新聞的網(wǎng)頁(yè)與作弊網(wǎng)頁(yè)一樣重要。如果搜索引擎抓取的網(wǎng)頁(yè)大部分都是比較重要的網(wǎng)頁(yè),就可以說(shuō)明他們在抓取網(wǎng)頁(yè)的重要性方面做得很好。你在這方面做得越好,搜索引擎就會(huì )越準確。
通過(guò)以上三個(gè)標準的分析,爬蟲(chóng)開(kāi)發(fā)的目標可以簡(jiǎn)單描述為:在資源有限的情況下,由于搜索引擎只能爬取互聯(lián)網(wǎng)上現有網(wǎng)頁(yè)的一部分,所以更重要的部分應盡可能選擇。要索引的頁(yè)面;對于已經(jīng)爬取的頁(yè)面,盡快更新內容,使被索引頁(yè)面的內容與互聯(lián)網(wǎng)上對應頁(yè)面的內容同步更新;網(wǎng)頁(yè)。三個(gè)“盡可能”基本明確了爬蟲(chóng)系統提升用戶(hù)體驗的目標。
為了滿(mǎn)足這三個(gè)質(zhì)量標準,大型商業(yè)搜索引擎開(kāi)發(fā)了多套針對性強的爬蟲(chóng)系統。以谷歌為例,至少有兩種不同的爬蟲(chóng)系統,一種叫做Fresh Bot,主要考慮網(wǎng)頁(yè)的新鮮度。對于內容更新頻繁的網(wǎng)頁(yè),目前更新周期可以達到秒級;另一組稱(chēng)為 Deep Crawl Bot,主要針對更新不頻繁、更新周期為幾天的網(wǎng)頁(yè)抓取。此外,谷歌在開(kāi)發(fā)暗網(wǎng)爬蟲(chóng)系統方面也投入了大量精力。以后有時(shí)間講解暗網(wǎng)系統。
谷歌的兩個(gè)爬蟲(chóng)系統
如果你對爬蟲(chóng)感興趣,還可以閱讀:
干貨全流程| 解密爬蟲(chóng)爬取更新網(wǎng)頁(yè)的策略方法
網(wǎng)絡(luò )爬蟲(chóng) | 你不知道的暗網(wǎng)是怎么爬的?
網(wǎng)絡(luò )爬蟲(chóng) | 你知道分布式爬蟲(chóng)是如何工作的嗎? 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
爬蟲(chóng)通用爬蟲(chóng)技術(shù)框架爬蟲(chóng)系統的誕生蜘蛛爬蟲(chóng)系統)
干貨全流程| 入門(mén)級爬蟲(chóng)技術(shù)原理,這就夠了
爬蟲(chóng)系統的誕生
蜘蛛爬蟲(chóng)
一般搜索引擎的處理對象是互聯(lián)網(wǎng)頁(yè)面。目前,互聯(lián)網(wǎng)頁(yè)面數量已達100億。因此,搜索引擎面臨的第一個(gè)問(wèn)題就是:如何設計一個(gè)高效的下載系統,將如此海量的網(wǎng)頁(yè)數據傳輸到本地?;ヂ?lián)網(wǎng)網(wǎng)頁(yè)的鏡像備份在本地形成。
網(wǎng)絡(luò )爬蟲(chóng)可以發(fā)揮這樣的作用,完成這項艱巨的任務(wù)。它是搜索引擎系統中一個(gè)非常關(guān)鍵和基本的組件。本文主要介紹網(wǎng)絡(luò )爬蟲(chóng)相關(guān)的技術(shù)。雖然爬蟲(chóng)經(jīng)過(guò)幾十年的發(fā)展,在整體框架上已經(jīng)比較成熟,但隨著(zhù)互聯(lián)網(wǎng)的不斷發(fā)展,它們也面臨著(zhù)一些新的挑戰。
通用爬蟲(chóng)技術(shù)框架
爬蟲(chóng)系統首先從互聯(lián)網(wǎng)頁(yè)面中精心挑選一些網(wǎng)頁(yè),將這些網(wǎng)頁(yè)的鏈接地址作為種子URL,將這些種子放入待爬取的URL隊列中。爬蟲(chóng)依次讀取要爬取的URL,通過(guò)DNS Parse傳遞URL,將鏈接地址轉換為網(wǎng)站服務(wù)器對應的IP地址。然后把它和網(wǎng)頁(yè)的相對路徑名交給網(wǎng)頁(yè)下載器,網(wǎng)頁(yè)下載器負責下載網(wǎng)頁(yè)。對于下載到本地的網(wǎng)頁(yè),一方面是存儲在頁(yè)庫中,等待索引等后續處理;另一方面,將下載網(wǎng)頁(yè)的URL放入爬取隊列,記錄爬蟲(chóng)系統已經(jīng)下載的網(wǎng)頁(yè)URL,避免系統重復爬取。對于剛剛下載的網(wǎng)頁(yè),提取其中收錄的所有鏈接信息,并在下載的URL隊列中進(jìn)行檢查。如果發(fā)現該鏈接沒(méi)有被爬取,則將其放在待爬取的URL隊列的末尾。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。該 URL 對應的網(wǎng)頁(yè)將在爬取計劃中下載。這樣就形成了一個(gè)循環(huán),直到待爬取的URL隊列為空,這意味著(zhù)爬蟲(chóng)系統已經(jīng)對所有可以爬取的網(wǎng)頁(yè)進(jìn)行了爬取,此時(shí)完成了一個(gè)完整的爬取過(guò)程。
常見(jiàn)爬蟲(chóng)架構
以上是一般爬蟲(chóng)的整體流程。從宏觀(guān)上看,動(dòng)態(tài)爬取過(guò)程中的爬蟲(chóng)與互聯(lián)網(wǎng)上所有網(wǎng)頁(yè)的關(guān)系可以概括為以下五個(gè)部分:
下載網(wǎng)頁(yè)的綁定:爬蟲(chóng)從互聯(lián)網(wǎng)上下載到本地索引的網(wǎng)頁(yè)的集合。
過(guò)期網(wǎng)頁(yè)組合:由于網(wǎng)頁(yè)數量較多,爬蟲(chóng)完成一輪完整的爬取需要較長(cháng)時(shí)間。在爬取過(guò)程中,很多下載的網(wǎng)頁(yè)可能已經(jīng)更新,導致過(guò)期。原因是互聯(lián)網(wǎng)上的網(wǎng)頁(yè)處于不斷動(dòng)態(tài)變化的過(guò)程中,很容易產(chǎn)生本地網(wǎng)頁(yè)內容與真實(shí)互聯(lián)網(wǎng)的不一致。
待下載網(wǎng)頁(yè)集合:URL隊列中待爬取的網(wǎng)頁(yè),這些網(wǎng)頁(yè)即將被爬蟲(chóng)下載。
已知網(wǎng)頁(yè)集合:這些網(wǎng)頁(yè)沒(méi)有被爬蟲(chóng)下載,也沒(méi)有出現在待爬取的URL隊列中。通過(guò)已經(jīng)爬取的網(wǎng)頁(yè)或者待爬取的URL隊列中的網(wǎng)頁(yè),總是可以通過(guò)鏈接關(guān)系找到它們。稍后會(huì )被爬蟲(chóng)抓取和索引。
未知網(wǎng)頁(yè)的集合:一些網(wǎng)頁(yè)無(wú)法被爬蟲(chóng)抓取,這些網(wǎng)頁(yè)構成了未知網(wǎng)頁(yè)的組合。實(shí)際上,這部分頁(yè)面占比很高。
互聯(lián)網(wǎng)頁(yè)面劃分
從理解爬蟲(chóng)的角度來(lái)看,以上對互聯(lián)網(wǎng)頁(yè)面的劃分有助于深入理解搜索引擎爬蟲(chóng)面臨的主要任務(wù)和挑戰。絕大多數爬蟲(chóng)系統都遵循上述流程,但并非所有爬蟲(chóng)系統都如此一致。根據具體的應用,爬蟲(chóng)系統在很多方面都有所不同。一般來(lái)說(shuō),爬蟲(chóng)系統可以分為以下三種。
批處理式爬蟲(chóng):批處理式爬蟲(chóng)的抓取范圍和目標比較明確。當爬蟲(chóng)達到這個(gè)設定的目標時(shí),它會(huì )停止爬取過(guò)程。至于具體的目標,可能不一樣,可能是設置爬取一定數量的網(wǎng)頁(yè),也可能是設置爬取時(shí)間等等,都不一樣。
增量爬蟲(chóng):與批量爬蟲(chóng)不同,增量爬蟲(chóng)會(huì )不斷地爬取。抓取到的網(wǎng)頁(yè)要定期更新,因為互聯(lián)網(wǎng)網(wǎng)頁(yè)在不斷變化,新網(wǎng)頁(yè)、網(wǎng)頁(yè)被刪除或網(wǎng)頁(yè)內容發(fā)生變化是常有的事,增量爬蟲(chóng)需要及時(shí)反映這種變化,所以在不斷的爬取過(guò)程,他們要么是在爬取新的網(wǎng)頁(yè),要么是在更新現有的網(wǎng)頁(yè)。常見(jiàn)的商業(yè)搜索引擎爬蟲(chóng)基本屬于這一類(lèi)。
垂直爬蟲(chóng):垂直爬蟲(chóng)專(zhuān)注于屬于特定行業(yè)的特定主題或網(wǎng)頁(yè)。比如健康網(wǎng)站,你只需要從互聯(lián)網(wǎng)頁(yè)面中找到健康相關(guān)的頁(yè)面內容,其他行業(yè)的內容是沒(méi)有的??紤]范圍。垂直爬蟲(chóng)最大的特點(diǎn)和難點(diǎn)之一是如何識別網(wǎng)頁(yè)內容是否屬于指定行業(yè)或主題。從節省系統資源的角度來(lái)看,下載后不可能屏蔽所有的互聯(lián)網(wǎng)頁(yè)面,這樣會(huì )造成資源的過(guò)度浪費。爬蟲(chóng)往往需要在爬取階段動(dòng)態(tài)識別某個(gè)URL是否與主題相關(guān),盡量不使用。爬取不相關(guān)的頁(yè)面以達到節省資源的目的。垂直搜索網(wǎng)站或垂直行業(yè)網(wǎng)站往往需要這種爬蟲(chóng)。
好的爬行動(dòng)物的特征
一個(gè)優(yōu)秀爬蟲(chóng)的特性可能針對不同的應用有不同的實(shí)現方式,但是一個(gè)實(shí)用的爬蟲(chóng)應該具備以下特性。
01高性能
互聯(lián)網(wǎng)上的網(wǎng)頁(yè)數量非常龐大。因此,爬蟲(chóng)的性能非常重要。這里的性能主要是指爬蟲(chóng)下載網(wǎng)頁(yè)的爬取速度。常用的評價(jià)方法是用爬蟲(chóng)每秒可以下載的網(wǎng)頁(yè)數量作為性能指標。單位時(shí)間內可以下載的網(wǎng)頁(yè)越多,爬蟲(chóng)的性能就越高。
為了提高爬蟲(chóng)的性能,設計時(shí)程序訪(fǎng)問(wèn)磁盤(pán)的操作方式和具體實(shí)現時(shí)數據結構的選擇至關(guān)重要。例如,對于待爬取的URL隊列和已爬取的URL隊列,由于URL的數量非常多,不同實(shí)現方式的性能非常重要。性能差異很大,所以高效的數據結構對爬蟲(chóng)性能影響很大。
02 可擴展性
即使單個(gè)爬蟲(chóng)的性能很高,將所有網(wǎng)頁(yè)下載到本地仍然需要很長(cháng)時(shí)間。為了盡可能地縮短爬取周期,爬蟲(chóng)系統應該具有良好的可擴展性,即很容易增加 Crawl 的服務(wù)器和爬蟲(chóng)的數量來(lái)實(shí)現這一點(diǎn)。
目前實(shí)用的大型網(wǎng)絡(luò )爬蟲(chóng)必須以分布式方式運行,即多臺服務(wù)器專(zhuān)門(mén)進(jìn)行爬蟲(chóng),每臺服務(wù)器部署多個(gè)爬蟲(chóng),每個(gè)爬蟲(chóng)多線(xiàn)程運行,以多種方式增加并發(fā)。對于大型搜索引擎服務(wù)商來(lái)說(shuō),數據中心也可能會(huì )部署在全球、不同區域,爬蟲(chóng)也被分配到不同的數據中心,這對于提升爬蟲(chóng)系統的整體性能非常有幫助。
03 魯棒性
當爬蟲(chóng)想要訪(fǎng)問(wèn)各種類(lèi)型的網(wǎng)站服務(wù)器時(shí),可能會(huì )遇到很多異常情況,比如網(wǎng)頁(yè)的HTML編碼不規則,被爬取的服務(wù)器突然崩潰,甚至出現爬蟲(chóng)陷阱。爬蟲(chóng)能夠正確處理各種異常情況是非常重要的,否則它可能會(huì )時(shí)不時(shí)停止工作,這是難以忍受的。
從另一個(gè)角度來(lái)說(shuō),假設爬蟲(chóng)程序在爬取過(guò)程中死掉了,或者爬蟲(chóng)所在的服務(wù)器宕機了,一個(gè)健壯的爬蟲(chóng)應該可以做到。當爬蟲(chóng)再次啟動(dòng)時(shí),它可以恢復之前爬取的內容和數據結構。不必每次都從頭開(kāi)始做所有的工作,這也是爬蟲(chóng)健壯性的體現。
04友善
爬蟲(chóng)的友好性有兩層含義:一是保護網(wǎng)站的部分隱私,二是減少被爬取的網(wǎng)站的網(wǎng)絡(luò )負載。爬蟲(chóng)爬取的對象是各種類(lèi)型的網(wǎng)站。對于網(wǎng)站的擁有者來(lái)說(shuō),有些內容不想被所有人搜索到,所以需要設置一個(gè)協(xié)議來(lái)告知爬蟲(chóng)哪些內容不是。允許爬行。目前,實(shí)現這一目標的主流方法有兩種:爬蟲(chóng)禁止協(xié)議和網(wǎng)頁(yè)禁止標記。
爬蟲(chóng)禁止協(xié)議是指網(wǎng)站的擁有者生成的指定文件robot.txt,放在網(wǎng)站服務(wù)器的根目錄下。該文件表示網(wǎng)站中哪些目錄下面的網(wǎng)頁(yè)不允許被爬蟲(chóng)爬取。在爬取網(wǎng)站的網(wǎng)頁(yè)之前,友好的爬蟲(chóng)必須先讀取robot.txt文件,并且不會(huì )下載被禁止爬取的網(wǎng)頁(yè)。
網(wǎng)頁(yè)禁止標簽一般在網(wǎng)頁(yè)的HTML代碼中通過(guò)添加metaimage-package">
索引網(wǎng)頁(yè)與互聯(lián)網(wǎng)網(wǎng)頁(yè)
爬取的本地網(wǎng)頁(yè)很可能發(fā)生了變化,或者被刪除,或者內容發(fā)生了變化,因為爬蟲(chóng)完成一輪爬取需要很長(cháng)時(shí)間,所以部分爬取的網(wǎng)頁(yè)肯定是過(guò)期的。因此,網(wǎng)頁(yè)庫中的過(guò)期數據越少,網(wǎng)頁(yè)的新鮮度就越好,對提升用戶(hù)體驗大有裨益。如果新穎性不好,搜索結果全是過(guò)時(shí)數據,或者網(wǎng)頁(yè)被刪除,用戶(hù)的內心感受可想而知。
盡管 Internet 上有很多網(wǎng)頁(yè),但每個(gè)網(wǎng)頁(yè)都有很大的不同。例如,騰訊和網(wǎng)易新聞的網(wǎng)頁(yè)與作弊網(wǎng)頁(yè)一樣重要。如果搜索引擎抓取的網(wǎng)頁(yè)大部分都是比較重要的網(wǎng)頁(yè),就可以說(shuō)明他們在抓取網(wǎng)頁(yè)的重要性方面做得很好。你在這方面做得越好,搜索引擎就會(huì )越準確。
通過(guò)以上三個(gè)標準的分析,爬蟲(chóng)開(kāi)發(fā)的目標可以簡(jiǎn)單描述為:在資源有限的情況下,由于搜索引擎只能爬取互聯(lián)網(wǎng)上現有網(wǎng)頁(yè)的一部分,所以更重要的部分應盡可能選擇。要索引的頁(yè)面;對于已經(jīng)爬取的頁(yè)面,盡快更新內容,使被索引頁(yè)面的內容與互聯(lián)網(wǎng)上對應頁(yè)面的內容同步更新;網(wǎng)頁(yè)。三個(gè)“盡可能”基本明確了爬蟲(chóng)系統提升用戶(hù)體驗的目標。
為了滿(mǎn)足這三個(gè)質(zhì)量標準,大型商業(yè)搜索引擎開(kāi)發(fā)了多套針對性強的爬蟲(chóng)系統。以谷歌為例,至少有兩種不同的爬蟲(chóng)系統,一種叫做Fresh Bot,主要考慮網(wǎng)頁(yè)的新鮮度。對于內容更新頻繁的網(wǎng)頁(yè),目前更新周期可以達到秒級;另一組稱(chēng)為 Deep Crawl Bot,主要針對更新不頻繁、更新周期為幾天的網(wǎng)頁(yè)抓取。此外,谷歌在開(kāi)發(fā)暗網(wǎng)爬蟲(chóng)系統方面也投入了大量精力。以后有時(shí)間講解暗網(wǎng)系統。
谷歌的兩個(gè)爬蟲(chóng)系統
如果你對爬蟲(chóng)感興趣,還可以閱讀:
干貨全流程| 解密爬蟲(chóng)爬取更新網(wǎng)頁(yè)的策略方法
網(wǎng)絡(luò )爬蟲(chóng) | 你不知道的暗網(wǎng)是怎么爬的?
網(wǎng)絡(luò )爬蟲(chóng) | 你知道分布式爬蟲(chóng)是如何工作的嗎?
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(剛剛開(kāi)始python3簡(jiǎn)單的爬蟲(chóng),爬蟲(chóng)一下貼吧的圖片吧。)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 59 次瀏覽 ? 2022-02-23 23:21
我也是剛開(kāi)始學(xué)python爬蟲(chóng)技術(shù),后來(lái)想在網(wǎng)上找一些教程看看。誰(shuí)知道,一搜,大部分都是用python2寫(xiě)的。新手一般喜歡安裝新版本。于是我也寫(xiě)了一個(gè)簡(jiǎn)單的python3爬蟲(chóng),爬取貼吧的圖片。事不宜遲,讓我們開(kāi)始吧。
首先,讓我們談?wù)勚R。
一、什么是爬蟲(chóng)?
采集網(wǎng)頁(yè)上的數據
二、學(xué)習爬蟲(chóng)的作用是什么?
做案例研究,做數據分析,分析網(wǎng)頁(yè)結構......
三、爬蟲(chóng)環(huán)境
要求:python3x pycharm
模塊:urllib、urllib2、bs4、re
四、爬蟲(chóng)思路:
1. 打開(kāi)網(wǎng)頁(yè)并獲取源代碼。
*由于多人同時(shí)爬取某個(gè)網(wǎng)站,會(huì )造成數據冗余和網(wǎng)站崩潰,所以部分網(wǎng)站被禁止爬取,會(huì )返回403 access denied錯誤信息。----獲取不到想要的內容/請求失敗/IP容易被封....等
*解決方案:偽裝 - 不要告訴 網(wǎng)站 我是一個(gè)腳本,告訴它我是一個(gè)瀏覽器。(添加任意瀏覽器的頭信息,偽裝成瀏覽器),既然是簡(jiǎn)單的例子,那我們就不搞這些刁鉆的操作了。
2. 獲取圖片
*查找功能:只查找第一個(gè)目標,查詢(xún)一次
*Find_all 功能:查找所有相同的對象。
這里的解析器可能有問(wèn)題,我們就不多說(shuō)了。有問(wèn)題的學(xué)生有一堆解決方案。
3. 保存圖片地址并下載圖片
*一種。使用urllib---urlretrieve下載(保存位置:如果和*.py文件保存在同一個(gè)地方,那么只需要文件夾名,如果在別處,那么一定要寫(xiě)絕對路徑。)
算了,廢話(huà)不多說(shuō),既然是簡(jiǎn)單的例子,那我就直接貼代碼了。相信沒(méi)有多少人不明白。
有一件事要提:您可以在沒(méi)有??偷那闆r下使用 BeautifulSoup;爬蟲(chóng)使用正則、Bs4 和 xpath。只需選擇三個(gè)中的一個(gè)。當然,它也可以組合使用,以及其他類(lèi)型。
爬取地址:
百度貼吧的壁紙圖片。
代碼顯示如下:
import urllib.request
import re
import os
import urllib
#!/usr/bin/python3
import re
import os
import urllib.request
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg) #轉換成一個(gè)正則對象
imglist = imgre.findall(html) #表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
print("====圖片的地址=====",imglist)
x = 0 #聲明一個(gè)變量賦值
path = r'H:/python lianxi/zout_pc5/test' #設置保存地址
if not os.path.isdir(path):
os.makedirs(path) # 將圖片保存到文件夾,沒(méi)有則創(chuàng )建
paths = path+'/'
print(paths)
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist,下載圖片保存在本地,
x = x + 1
print('圖片已開(kāi)始下載,注意查看文件夾')
return imglist
html = getHtml("http://tieba.baidu.com/p/3840085725") #獲取該網(wǎng)址網(wǎng)頁(yè)的源代碼
print(getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
最終效果如下:
好了,教程到此結束。
參考地址:
?。╬s:我也是python新手,文章如有錯誤請多多包涵) 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(剛剛開(kāi)始python3簡(jiǎn)單的爬蟲(chóng),爬蟲(chóng)一下貼吧的圖片吧。)
我也是剛開(kāi)始學(xué)python爬蟲(chóng)技術(shù),后來(lái)想在網(wǎng)上找一些教程看看。誰(shuí)知道,一搜,大部分都是用python2寫(xiě)的。新手一般喜歡安裝新版本。于是我也寫(xiě)了一個(gè)簡(jiǎn)單的python3爬蟲(chóng),爬取貼吧的圖片。事不宜遲,讓我們開(kāi)始吧。
首先,讓我們談?wù)勚R。
一、什么是爬蟲(chóng)?
采集網(wǎng)頁(yè)上的數據
二、學(xué)習爬蟲(chóng)的作用是什么?
做案例研究,做數據分析,分析網(wǎng)頁(yè)結構......
三、爬蟲(chóng)環(huán)境
要求:python3x pycharm
模塊:urllib、urllib2、bs4、re
四、爬蟲(chóng)思路:
1. 打開(kāi)網(wǎng)頁(yè)并獲取源代碼。
*由于多人同時(shí)爬取某個(gè)網(wǎng)站,會(huì )造成數據冗余和網(wǎng)站崩潰,所以部分網(wǎng)站被禁止爬取,會(huì )返回403 access denied錯誤信息。----獲取不到想要的內容/請求失敗/IP容易被封....等
*解決方案:偽裝 - 不要告訴 網(wǎng)站 我是一個(gè)腳本,告訴它我是一個(gè)瀏覽器。(添加任意瀏覽器的頭信息,偽裝成瀏覽器),既然是簡(jiǎn)單的例子,那我們就不搞這些刁鉆的操作了。
2. 獲取圖片
*查找功能:只查找第一個(gè)目標,查詢(xún)一次
*Find_all 功能:查找所有相同的對象。
這里的解析器可能有問(wèn)題,我們就不多說(shuō)了。有問(wèn)題的學(xué)生有一堆解決方案。
3. 保存圖片地址并下載圖片
*一種。使用urllib---urlretrieve下載(保存位置:如果和*.py文件保存在同一個(gè)地方,那么只需要文件夾名,如果在別處,那么一定要寫(xiě)絕對路徑。)
算了,廢話(huà)不多說(shuō),既然是簡(jiǎn)單的例子,那我就直接貼代碼了。相信沒(méi)有多少人不明白。
有一件事要提:您可以在沒(méi)有??偷那闆r下使用 BeautifulSoup;爬蟲(chóng)使用正則、Bs4 和 xpath。只需選擇三個(gè)中的一個(gè)。當然,它也可以組合使用,以及其他類(lèi)型。
爬取地址:
百度貼吧的壁紙圖片。
代碼顯示如下:
import urllib.request
import re
import os
import urllib
#!/usr/bin/python3
import re
import os
import urllib.request
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg) #轉換成一個(gè)正則對象
imglist = imgre.findall(html) #表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
print("====圖片的地址=====",imglist)
x = 0 #聲明一個(gè)變量賦值
path = r'H:/python lianxi/zout_pc5/test' #設置保存地址
if not os.path.isdir(path):
os.makedirs(path) # 將圖片保存到文件夾,沒(méi)有則創(chuàng )建
paths = path+'/'
print(paths)
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist,下載圖片保存在本地,
x = x + 1
print('圖片已開(kāi)始下載,注意查看文件夾')
return imglist
html = getHtml("http://tieba.baidu.com/p/3840085725") #獲取該網(wǎng)址網(wǎng)頁(yè)的源代碼
print(getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
最終效果如下:

好了,教程到此結束。
參考地址:
?。╬s:我也是python新手,文章如有錯誤請多多包涵)
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(潤森什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 68 次瀏覽 ? 2022-02-23 19:12
)
大家好,我是潤森
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站通過(guò)Robots Protocol,告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 系統附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的基本術(shù)語(yǔ),指的是用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
"
那么圖片需要在哪里呢?
?
圖片保存在云服務(wù)器的數據庫中
"
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requestsr = requests.get('http://pic37.nipic.com/2014011 ... %2339;)with open('demo.jpg','wb+') as f:f.write(r.content)
?
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
"
先了解json
?
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
"
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{ “name”: “毛利”, “age”: 18, “ feature “ : [‘高’, ‘富’, ‘帥’]}
Python字典
{ ‘name’: ‘毛利’, ‘a(chǎn)ge’: 18 ‘feature’ : [‘高’, ‘富’, ‘帥’]}
?
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
"
在python中導入json,傳遞json.loads(s) --> 將json數據轉換成python數據(字典)
ajax的使用
?
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
"
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
分析圖片url鏈接的位置
同時(shí)找到ajax請求對應的url
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requestsimport jsonheaders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}r = requests.get('https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=',headers = headers).textres = json.loads(r)['data']for index,i in enumerate(res): url = i['hoverURL'] print(url) with open( '{}.jpg'.format(index),'wb+') as f: f.write(requests.get(url).content)
?
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
"
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&1561022599355=https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-# time :2019/6/20 17:07# author: 毛利import requestsimport jsonimport osdef get_pic_url(num): pic_url= [] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'} for i in range(num): page_url = 'https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&1561022599290='.format(30*i) r = requests.get(page_url, headers=headers).text res = json.loads(r)['data'] if res: print(res) for j in res: try: url = j['hoverURL'] pic_url.append(url) except: print('該圖片的url不存在') print(len(pic_url)) return pic_urldef down_img(num): pic_url =get_pic_url(num) if os.path.exists('D:圖片'): pass else: os.makedirs('D:圖片') path = 'D:圖片' for index,i in enumerate(pic_url): filename = path + str(index) + '.jpg' print(filename) with open(filename, 'wb+') as f: f.write(requests.get(i).content)if __name__ == '__main__': num = int(input('爬取幾次圖片:一次30張')) down_img(num)
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(潤森什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛)
)
大家好,我是潤森
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站通過(guò)Robots Protocol,告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 系統附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?

從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的基本術(shù)語(yǔ),指的是用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
"
那么圖片需要在哪里呢?
?
圖片保存在云服務(wù)器的數據庫中
"
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requestsr = requests.get('http://pic37.nipic.com/2014011 ... %2339;)with open('demo.jpg','wb+') as f:f.write(r.content)
?
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
"
先了解json
?
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
"
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{ “name”: “毛利”, “age”: 18, “ feature “ : [‘高’, ‘富’, ‘帥’]}
Python字典
{ ‘name’: ‘毛利’, ‘a(chǎn)ge’: 18 ‘feature’ : [‘高’, ‘富’, ‘帥’]}
?
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
"
在python中導入json,傳遞json.loads(s) --> 將json數據轉換成python數據(字典)
ajax的使用
?
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
"
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,

分析圖片url鏈接的位置

同時(shí)找到ajax請求對應的url

構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requestsimport jsonheaders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}r = requests.get('https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=',headers = headers).textres = json.loads(r)['data']for index,i in enumerate(res): url = i['hoverURL'] print(url) with open( '{}.jpg'.format(index),'wb+') as f: f.write(requests.get(url).content)

?
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
"
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=60&rn=30&gsm=3c&1561022599355=https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=30&rn=30&gsm=1e&1561022599290=
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化

最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-# time :2019/6/20 17:07# author: 毛利import requestsimport jsonimport osdef get_pic_url(num): pic_url= [] headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'} for i in range(num): page_url = 'https://image.baidu.com/search ... st%3D?right=&word=%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=1e&1561022599290='.format(30*i) r = requests.get(page_url, headers=headers).text res = json.loads(r)['data'] if res: print(res) for j in res: try: url = j['hoverURL'] pic_url.append(url) except: print('該圖片的url不存在') print(len(pic_url)) return pic_urldef down_img(num): pic_url =get_pic_url(num) if os.path.exists('D:圖片'): pass else: os.makedirs('D:圖片') path = 'D:圖片' for index,i in enumerate(pic_url): filename = path + str(index) + '.jpg' print(filename) with open(filename, 'wb+') as f: f.write(requests.get(i).content)if __name__ == '__main__': num = int(input('爬取幾次圖片:一次30張')) down_img(num)


網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)抓取量其實(shí)簡(jiǎn)單就是百度對站點(diǎn)一天網(wǎng)頁(yè)的數量)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 110 次瀏覽 ? 2022-02-23 05:10
影響百度爬蟲(chóng)網(wǎng)站爬取量的因素有哪些?百度爬蟲(chóng)的爬取量實(shí)際上是百度爬蟲(chóng)在一天內爬取一個(gè)網(wǎng)站的頁(yè)面數。在這里,新網(wǎng)小編就為大家介紹一下影響百度爬蟲(chóng)網(wǎng)站爬取量的因素。
其中之一就是本站生成新的網(wǎng)頁(yè),對于中小型網(wǎng)站可以在同一天完成。大的 網(wǎng)站 可能無(wú)法完成它們。百度收錄有5W,那么百度會(huì )給一個(gè)時(shí)間段,比如30天,然后平均出來(lái),每天去這個(gè)網(wǎng)站搶5W/30這樣一個(gè)數字,但是具體金額,百度有自己的一套算法公式可以計算。
影響百度抓取量的因素。
1.網(wǎng)站安全
對于中小型網(wǎng)站來(lái)說(shuō),安全技術(shù)比較薄弱,被黑客篡改的現象非常普遍。通常,有幾種常見(jiàn)的被黑客入侵的情況。一是主域被黑,二是標題被篡改,二是頁(yè)面有很多外部鏈接。一般主域被黑了就是劫持了,就是主域被301重定向到指定的網(wǎng)站,如果你在百度上跳轉后發(fā)現一些垃圾站,那么你的站點(diǎn)就搶量里面會(huì )減少。
2.內容質(zhì)量
如果爬取了10萬(wàn)個(gè)頁(yè)面,只創(chuàng )建了100個(gè),爬取量就會(huì )下降,因為百度會(huì )認為爬取的頁(yè)面比例很低,所以沒(méi)必要多爬取,所以“最好是短于浪費”,尤其是在建網(wǎng)站的時(shí)候,一定要注意質(zhì)量,不要采集一些內容,這是一個(gè)潛在的隱患。
3.網(wǎng)站響應能力
?、?網(wǎng)頁(yè)大小會(huì )影響爬取。百度推薦網(wǎng)頁(yè)大小在1M以?xún)?。當然,它?lèi)似于新浪所說(shuō)的大型門(mén)戶(hù)網(wǎng)站。
?、诖a質(zhì)量、機器性能和帶寬,這個(gè)不多說(shuō),后面作者會(huì )單獨拿出文章解釋?zhuān)垖?shí)時(shí)關(guān)注“營(yíng)銷(xiāo)專(zhuān)家”。
4.同一ip上的主域數
百度爬取是基于ip的。比如一個(gè)ip每天爬1000w個(gè)頁(yè)面,這個(gè)站點(diǎn)有40W個(gè)站點(diǎn),那么平均每個(gè)站點(diǎn)的爬取次數會(huì )很分散。很少。
相信大家都知道哪些因素會(huì )影響百度爬蟲(chóng)對網(wǎng)站的抓取量。提醒大家,在選擇服務(wù)商的時(shí)候,要檢查一下同一個(gè)ip上是否有大網(wǎng)站。如果有大站點(diǎn)的話(huà),可能分配的爬取量會(huì )很小,因為流量會(huì )流向大站點(diǎn)。
_創(chuàng )新互聯(lián),為您提供面包屑導航、網(wǎng)站導航、網(wǎng)站策劃、搜索引擎優(yōu)化、網(wǎng)站、網(wǎng)站制作 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)抓取量其實(shí)簡(jiǎn)單就是百度對站點(diǎn)一天網(wǎng)頁(yè)的數量)
影響百度爬蟲(chóng)網(wǎng)站爬取量的因素有哪些?百度爬蟲(chóng)的爬取量實(shí)際上是百度爬蟲(chóng)在一天內爬取一個(gè)網(wǎng)站的頁(yè)面數。在這里,新網(wǎng)小編就為大家介紹一下影響百度爬蟲(chóng)網(wǎng)站爬取量的因素。
其中之一就是本站生成新的網(wǎng)頁(yè),對于中小型網(wǎng)站可以在同一天完成。大的 網(wǎng)站 可能無(wú)法完成它們。百度收錄有5W,那么百度會(huì )給一個(gè)時(shí)間段,比如30天,然后平均出來(lái),每天去這個(gè)網(wǎng)站搶5W/30這樣一個(gè)數字,但是具體金額,百度有自己的一套算法公式可以計算。
影響百度抓取量的因素。
1.網(wǎng)站安全
對于中小型網(wǎng)站來(lái)說(shuō),安全技術(shù)比較薄弱,被黑客篡改的現象非常普遍。通常,有幾種常見(jiàn)的被黑客入侵的情況。一是主域被黑,二是標題被篡改,二是頁(yè)面有很多外部鏈接。一般主域被黑了就是劫持了,就是主域被301重定向到指定的網(wǎng)站,如果你在百度上跳轉后發(fā)現一些垃圾站,那么你的站點(diǎn)就搶量里面會(huì )減少。
2.內容質(zhì)量
如果爬取了10萬(wàn)個(gè)頁(yè)面,只創(chuàng )建了100個(gè),爬取量就會(huì )下降,因為百度會(huì )認為爬取的頁(yè)面比例很低,所以沒(méi)必要多爬取,所以“最好是短于浪費”,尤其是在建網(wǎng)站的時(shí)候,一定要注意質(zhì)量,不要采集一些內容,這是一個(gè)潛在的隱患。
3.網(wǎng)站響應能力
?、?網(wǎng)頁(yè)大小會(huì )影響爬取。百度推薦網(wǎng)頁(yè)大小在1M以?xún)?。當然,它?lèi)似于新浪所說(shuō)的大型門(mén)戶(hù)網(wǎng)站。
?、诖a質(zhì)量、機器性能和帶寬,這個(gè)不多說(shuō),后面作者會(huì )單獨拿出文章解釋?zhuān)垖?shí)時(shí)關(guān)注“營(yíng)銷(xiāo)專(zhuān)家”。
4.同一ip上的主域數
百度爬取是基于ip的。比如一個(gè)ip每天爬1000w個(gè)頁(yè)面,這個(gè)站點(diǎn)有40W個(gè)站點(diǎn),那么平均每個(gè)站點(diǎn)的爬取次數會(huì )很分散。很少。
相信大家都知道哪些因素會(huì )影響百度爬蟲(chóng)對網(wǎng)站的抓取量。提醒大家,在選擇服務(wù)商的時(shí)候,要檢查一下同一個(gè)ip上是否有大網(wǎng)站。如果有大站點(diǎn)的話(huà),可能分配的爬取量會(huì )很小,因為流量會(huì )流向大站點(diǎn)。
_創(chuàng )新互聯(lián),為您提供面包屑導航、網(wǎng)站導航、網(wǎng)站策劃、搜索引擎優(yōu)化、網(wǎng)站、網(wǎng)站制作
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么使用爬蟲(chóng)為什么我們需要使用千磨風(fēng)?(上))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 444 次瀏覽 ? 2022-02-22 15:11
關(guān)鍵詞:爬蟲(chóng)簡(jiǎn)介
千辛萬(wàn)苦,千錘百煉,任爾南北風(fēng),東風(fēng)西風(fēng)。本期文章主要講第55天:爬蟲(chóng)相關(guān)知識介紹,希望對大家有所幫助。
由先歡
作為程序員,相信大家對“爬蟲(chóng)”這個(gè)詞并不陌生。人們經(jīng)常在周?chē)岬竭@個(gè)詞。在不知道的人眼里,他們會(huì )認為這項技術(shù)非常高端和神秘。別著(zhù)急,我們的爬蟲(chóng)系列就帶你揭開(kāi)它的神秘面紗,探尋它的真面目。
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛或網(wǎng)絡(luò )機器人)是一種程序或腳本,它根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上的信息。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
通俗地說(shuō),我們把互聯(lián)網(wǎng)比作一個(gè)大蜘蛛網(wǎng),每個(gè)站點(diǎn)資源都比作蜘蛛網(wǎng)上的一個(gè)節點(diǎn)。爬蟲(chóng)就像一只蜘蛛,按照設計好的路線(xiàn)和規則在這張蜘蛛網(wǎng)上尋找目標節點(diǎn)。,獲取資源。
為什么要使用爬蟲(chóng)
為什么我們需要使用爬蟲(chóng)?
你可以想象一個(gè)場(chǎng)景:你很崇拜一個(gè)微博名人,你對他的微博很著(zhù)迷,你想把他微博上十年的每一句話(huà)都提取出來(lái),做成名人語(yǔ)錄。你在這個(gè)時(shí)候做什么?手動(dòng)轉到 Ctrl+C 和 Ctrl+V?這種方法確實(shí)是正確的。數據量少的時(shí)候我們可以這樣做,但是數據量上千的時(shí)候還需要這樣做嗎?
再想象一個(gè)場(chǎng)景:你想做一個(gè)新聞聚合網(wǎng)站,你需要每天定時(shí)去幾條新聞網(wǎng)站獲取最新消息,我們稱(chēng)之為RSS訂閱。你定期去每個(gè)訂閱網(wǎng)站復制新聞嗎?恐怕個(gè)人很難做到這一點(diǎn)。
在以上兩種場(chǎng)景下,使用爬蟲(chóng)技術(shù)可以輕松解決問(wèn)題。因此,我們可以看到爬蟲(chóng)技術(shù)主要可以幫我們做兩種事情:一是數據獲取需求,主要是針對特定規則下的大量數據的獲??;另一個(gè)是自動(dòng)化需求,主要用于類(lèi)似信息的聚合、搜索等。
爬行動(dòng)物的分類(lèi)
從爬取對象的角度,爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
通用網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為Scalable Web Crawler,將爬取對象從一些種子URL擴展到整個(gè)Web,主要針對搜索引擎和大型Web服務(wù)商采集數據。此類(lèi)網(wǎng)絡(luò )爬蟲(chóng)的爬取范圍和數量巨大,對爬取速度和存儲空間的要求比較高,對爬取頁(yè)面的順序要求比較低。比如我們常見(jiàn)的百度和谷歌搜索。我們進(jìn)入關(guān)鍵詞,他們會(huì )從全網(wǎng)找到關(guān)鍵詞相關(guān)的網(wǎng)頁(yè),并按照一定的順序呈現給我們。
Focused Crawler 是指有選擇地抓取與??預定義主題相關(guān)的頁(yè)面的網(wǎng)絡(luò )爬蟲(chóng)。與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,聚焦爬蟲(chóng)只需要爬取特定的網(wǎng)頁(yè),爬取的廣度會(huì )小很多。比如我們需要爬取東方財富網(wǎng)的基金數據,只需要制定規則爬取東方財富網(wǎng)的頁(yè)面即可。
通俗的說(shuō),萬(wàn)能爬蟲(chóng)類(lèi)似于蜘蛛,需要尋找特定的食物,但是它不知道蜘蛛網(wǎng)的哪個(gè)節點(diǎn)有它,所以只能從一個(gè)節點(diǎn)開(kāi)始,到時(shí)候再看這個(gè)節點(diǎn)遇到它,如果有食物就拿食物,如果這個(gè)節點(diǎn)表示某個(gè)節點(diǎn)有食物,那么它會(huì )按照指示尋找下一個(gè)節點(diǎn)。網(wǎng)絡(luò )爬蟲(chóng)的重點(diǎn)是蜘蛛知道哪個(gè)節點(diǎn)有食物,它只需要規劃一條路線(xiàn)到達那個(gè)節點(diǎn)就可以得到食物。
瀏覽網(wǎng)頁(yè)的過(guò)程
在用戶(hù)瀏覽網(wǎng)頁(yè)的過(guò)程中,我們可能會(huì )看到很多漂亮的圖片,比如我們會(huì )看到幾張圖片和百度搜索框,類(lèi)似下圖:
這個(gè)過(guò)程其實(shí)就是用戶(hù)輸入URL后,經(jīng)過(guò)DNS服務(wù)器,找到服務(wù)器主機,向服務(wù)器發(fā)送請求。服務(wù)器解析后,將html、js、css等文件發(fā)送到用戶(hù)的瀏覽器。瀏覽器解析后,用戶(hù)可以看到各種圖片。
因此,用戶(hù)看到的網(wǎng)頁(yè)本質(zhì)上是由 HTML 代碼組成的,爬蟲(chóng)爬取這些內容。通過(guò)對這些HTML代碼進(jìn)行分析和過(guò)濾,實(shí)現圖片、文字等資源的獲取。
網(wǎng)址的含義
URL,即Uniform Resource Locator,也就是我們所說(shuō)的網(wǎng)站,Uniform Resource Locator是對可以從互聯(lián)網(wǎng)上獲取的資源的位置和訪(fǎng)問(wèn)方式的簡(jiǎn)明表示,是互聯(lián)網(wǎng)上標準資源的地址. Internet 上的每個(gè)文件都有一個(gè)唯一的 URL,其中收錄指示文件位置以及瀏覽器應該如何處理它的信息。
URL的格式由三部分組成:
由于爬蟲(chóng)的目標是獲取資源,而資源存儲在某個(gè)主機上,所以爬蟲(chóng)在爬取數據時(shí)必須有一個(gè)目標URL來(lái)獲取數據。因此,它是爬蟲(chóng)獲取數據的基本依據。準確理解它的含義,對于爬蟲(chóng)的學(xué)習很有幫助。
爬蟲(chóng)的過(guò)程
我們下一章主要討論焦點(diǎn)爬蟲(chóng)。焦點(diǎn)爬蟲(chóng)的工作流程如下:
從這個(gè)爬蟲(chóng)的過(guò)程中,你應該可以想到學(xué)習爬蟲(chóng)需要學(xué)習的關(guān)鍵步驟。首先,我們需要像瀏覽器一樣請求一個(gè)URL來(lái)獲取主機的資源,所以正確請求和獲取內容的方法是我們研究的重點(diǎn)。我們獲取資源后(即請求URL后得到的響應內容),需要解析響應內容,為我們獲取有價(jià)值的數據。這里的分析方法是學(xué)習的重點(diǎn)。我們拿到數據后,接下來(lái)需要存儲數據,數據的存儲方式也很重要。
因此,我們所學(xué)的爬蟲(chóng)技術(shù)其實(shí)可以概括為三個(gè)基本問(wèn)題:請求、解析和存儲。如果掌握了這三個(gè)問(wèn)題的相應解決方案,爬蟲(chóng)技術(shù)就掌握了。在學(xué)習爬蟲(chóng)的過(guò)程中,大家都會(huì )關(guān)注這三個(gè)問(wèn)題,不會(huì )走彎路。
總結
本節介紹爬蟲(chóng)的基本概念,以便您對爬蟲(chóng)有一個(gè)大致的了解,以便在后續章節中學(xué)習。開(kāi)胃菜吃完了,下一節就要開(kāi)始饕餮盛宴了,你準備好了嗎?
文中示例代碼: 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么使用爬蟲(chóng)為什么我們需要使用千磨風(fēng)?(上))
關(guān)鍵詞:爬蟲(chóng)簡(jiǎn)介
千辛萬(wàn)苦,千錘百煉,任爾南北風(fēng),東風(fēng)西風(fēng)。本期文章主要講第55天:爬蟲(chóng)相關(guān)知識介紹,希望對大家有所幫助。
由先歡
作為程序員,相信大家對“爬蟲(chóng)”這個(gè)詞并不陌生。人們經(jīng)常在周?chē)岬竭@個(gè)詞。在不知道的人眼里,他們會(huì )認為這項技術(shù)非常高端和神秘。別著(zhù)急,我們的爬蟲(chóng)系列就帶你揭開(kāi)它的神秘面紗,探尋它的真面目。
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛或網(wǎng)絡(luò )機器人)是一種程序或腳本,它根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上的信息。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
通俗地說(shuō),我們把互聯(lián)網(wǎng)比作一個(gè)大蜘蛛網(wǎng),每個(gè)站點(diǎn)資源都比作蜘蛛網(wǎng)上的一個(gè)節點(diǎn)。爬蟲(chóng)就像一只蜘蛛,按照設計好的路線(xiàn)和規則在這張蜘蛛網(wǎng)上尋找目標節點(diǎn)。,獲取資源。
為什么要使用爬蟲(chóng)
為什么我們需要使用爬蟲(chóng)?
你可以想象一個(gè)場(chǎng)景:你很崇拜一個(gè)微博名人,你對他的微博很著(zhù)迷,你想把他微博上十年的每一句話(huà)都提取出來(lái),做成名人語(yǔ)錄。你在這個(gè)時(shí)候做什么?手動(dòng)轉到 Ctrl+C 和 Ctrl+V?這種方法確實(shí)是正確的。數據量少的時(shí)候我們可以這樣做,但是數據量上千的時(shí)候還需要這樣做嗎?
再想象一個(gè)場(chǎng)景:你想做一個(gè)新聞聚合網(wǎng)站,你需要每天定時(shí)去幾條新聞網(wǎng)站獲取最新消息,我們稱(chēng)之為RSS訂閱。你定期去每個(gè)訂閱網(wǎng)站復制新聞嗎?恐怕個(gè)人很難做到這一點(diǎn)。
在以上兩種場(chǎng)景下,使用爬蟲(chóng)技術(shù)可以輕松解決問(wèn)題。因此,我們可以看到爬蟲(chóng)技術(shù)主要可以幫我們做兩種事情:一是數據獲取需求,主要是針對特定規則下的大量數據的獲??;另一個(gè)是自動(dòng)化需求,主要用于類(lèi)似信息的聚合、搜索等。
爬行動(dòng)物的分類(lèi)
從爬取對象的角度,爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
通用網(wǎng)絡(luò )爬蟲(chóng),也稱(chēng)為Scalable Web Crawler,將爬取對象從一些種子URL擴展到整個(gè)Web,主要針對搜索引擎和大型Web服務(wù)商采集數據。此類(lèi)網(wǎng)絡(luò )爬蟲(chóng)的爬取范圍和數量巨大,對爬取速度和存儲空間的要求比較高,對爬取頁(yè)面的順序要求比較低。比如我們常見(jiàn)的百度和谷歌搜索。我們進(jìn)入關(guān)鍵詞,他們會(huì )從全網(wǎng)找到關(guān)鍵詞相關(guān)的網(wǎng)頁(yè),并按照一定的順序呈現給我們。
Focused Crawler 是指有選擇地抓取與??預定義主題相關(guān)的頁(yè)面的網(wǎng)絡(luò )爬蟲(chóng)。與一般的網(wǎng)絡(luò )爬蟲(chóng)相比,聚焦爬蟲(chóng)只需要爬取特定的網(wǎng)頁(yè),爬取的廣度會(huì )小很多。比如我們需要爬取東方財富網(wǎng)的基金數據,只需要制定規則爬取東方財富網(wǎng)的頁(yè)面即可。
通俗的說(shuō),萬(wàn)能爬蟲(chóng)類(lèi)似于蜘蛛,需要尋找特定的食物,但是它不知道蜘蛛網(wǎng)的哪個(gè)節點(diǎn)有它,所以只能從一個(gè)節點(diǎn)開(kāi)始,到時(shí)候再看這個(gè)節點(diǎn)遇到它,如果有食物就拿食物,如果這個(gè)節點(diǎn)表示某個(gè)節點(diǎn)有食物,那么它會(huì )按照指示尋找下一個(gè)節點(diǎn)。網(wǎng)絡(luò )爬蟲(chóng)的重點(diǎn)是蜘蛛知道哪個(gè)節點(diǎn)有食物,它只需要規劃一條路線(xiàn)到達那個(gè)節點(diǎn)就可以得到食物。
瀏覽網(wǎng)頁(yè)的過(guò)程
在用戶(hù)瀏覽網(wǎng)頁(yè)的過(guò)程中,我們可能會(huì )看到很多漂亮的圖片,比如我們會(huì )看到幾張圖片和百度搜索框,類(lèi)似下圖:

這個(gè)過(guò)程其實(shí)就是用戶(hù)輸入URL后,經(jīng)過(guò)DNS服務(wù)器,找到服務(wù)器主機,向服務(wù)器發(fā)送請求。服務(wù)器解析后,將html、js、css等文件發(fā)送到用戶(hù)的瀏覽器。瀏覽器解析后,用戶(hù)可以看到各種圖片。
因此,用戶(hù)看到的網(wǎng)頁(yè)本質(zhì)上是由 HTML 代碼組成的,爬蟲(chóng)爬取這些內容。通過(guò)對這些HTML代碼進(jìn)行分析和過(guò)濾,實(shí)現圖片、文字等資源的獲取。
網(wǎng)址的含義
URL,即Uniform Resource Locator,也就是我們所說(shuō)的網(wǎng)站,Uniform Resource Locator是對可以從互聯(lián)網(wǎng)上獲取的資源的位置和訪(fǎng)問(wèn)方式的簡(jiǎn)明表示,是互聯(lián)網(wǎng)上標準資源的地址. Internet 上的每個(gè)文件都有一個(gè)唯一的 URL,其中收錄指示文件位置以及瀏覽器應該如何處理它的信息。
URL的格式由三部分組成:
由于爬蟲(chóng)的目標是獲取資源,而資源存儲在某個(gè)主機上,所以爬蟲(chóng)在爬取數據時(shí)必須有一個(gè)目標URL來(lái)獲取數據。因此,它是爬蟲(chóng)獲取數據的基本依據。準確理解它的含義,對于爬蟲(chóng)的學(xué)習很有幫助。
爬蟲(chóng)的過(guò)程
我們下一章主要討論焦點(diǎn)爬蟲(chóng)。焦點(diǎn)爬蟲(chóng)的工作流程如下:

從這個(gè)爬蟲(chóng)的過(guò)程中,你應該可以想到學(xué)習爬蟲(chóng)需要學(xué)習的關(guān)鍵步驟。首先,我們需要像瀏覽器一樣請求一個(gè)URL來(lái)獲取主機的資源,所以正確請求和獲取內容的方法是我們研究的重點(diǎn)。我們獲取資源后(即請求URL后得到的響應內容),需要解析響應內容,為我們獲取有價(jià)值的數據。這里的分析方法是學(xué)習的重點(diǎn)。我們拿到數據后,接下來(lái)需要存儲數據,數據的存儲方式也很重要。
因此,我們所學(xué)的爬蟲(chóng)技術(shù)其實(shí)可以概括為三個(gè)基本問(wèn)題:請求、解析和存儲。如果掌握了這三個(gè)問(wèn)題的相應解決方案,爬蟲(chóng)技術(shù)就掌握了。在學(xué)習爬蟲(chóng)的過(guò)程中,大家都會(huì )關(guān)注這三個(gè)問(wèn)題,不會(huì )走彎路。
總結
本節介紹爬蟲(chóng)的基本概念,以便您對爬蟲(chóng)有一個(gè)大致的了解,以便在后續章節中學(xué)習。開(kāi)胃菜吃完了,下一節就要開(kāi)始饕餮盛宴了,你準備好了嗎?
文中示例代碼:
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一時(shí)間解決?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-02-22 15:07
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看
在當今社會(huì ),如何有效地提取和利用信息已成為一個(gè)巨大的挑戰?;谶@個(gè)巨大的市場(chǎng)需求,履帶技術(shù)應運而生,這也是為什么對履帶工程師的需求與日俱增的原因。那么Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握哪些核心技術(shù)呢?以小編推出的《Python網(wǎng)絡(luò )爬蟲(chóng)解析》課程為例,內容涉及Scrapy框架、分布式爬蟲(chóng)等核心技術(shù)。下面一起來(lái)看看Python網(wǎng)絡(luò )爬蟲(chóng)的具體學(xué)習內容吧!
Python網(wǎng)絡(luò )爬蟲(chóng)課程簡(jiǎn)介:
為了讓具備Python基礎的人適合工作需要,小編推出了全面、系統、簡(jiǎn)單的Python網(wǎng)絡(luò )爬蟲(chóng)入門(mén)課程,不僅講解了學(xué)習網(wǎng)絡(luò )爬蟲(chóng)必備的基礎知識,還增加了一個(gè)爬蟲(chóng)框架。學(xué)習完內容后,您將能夠全面掌握爬取和解析網(wǎng)頁(yè)的各種技術(shù),還可以掌握爬蟲(chóng)的一些擴展知識,如并發(fā)下載、識別圖片文本、抓取動(dòng)態(tài)內容等。并且每個(gè)人都可以掌握爬蟲(chóng)框架的使用,比如Scrapy,從而創(chuàng )建自己的網(wǎng)絡(luò )爬蟲(chóng)項目,勝任Python網(wǎng)絡(luò )爬蟲(chóng)工程師相關(guān)的工作。
Python網(wǎng)絡(luò )爬蟲(chóng)知識大綱:
第1部分
主要是帶領(lǐng)大家了解網(wǎng)絡(luò )爬蟲(chóng),包括爬蟲(chóng)的背景、什么是爬蟲(chóng)、爬蟲(chóng)的目的、爬蟲(chóng)的分類(lèi)等。
第2部分
主要講解爬蟲(chóng)的實(shí)現原理和技術(shù),包括爬蟲(chóng)的實(shí)現原理、爬取網(wǎng)頁(yè)的詳細過(guò)程、通用爬蟲(chóng)中網(wǎng)頁(yè)的分類(lèi)、通用爬蟲(chóng)相關(guān)的網(wǎng)站文件、反爬蟲(chóng)響應策略,以及為什么選擇 Python 爬蟲(chóng)等。希望讀者能夠了解爬蟲(chóng)是如何爬取網(wǎng)頁(yè)的,對爬取過(guò)程中出現的一些問(wèn)題有一定的了解,以后會(huì )針對這些問(wèn)題提供一些合理的解決方案。
第 3 部分
主要介紹網(wǎng)頁(yè)請求的原理,包括瀏覽網(wǎng)頁(yè)的過(guò)程、HTTP網(wǎng)絡(luò )請求的原理、HTTP抓包工具Fiddler。
第 4 部分
介紹了兩個(gè)用于抓取 Web 數據的庫:urllib 和 requests。首先介紹了urllib庫的基本使用,包括使用urllib傳輸數據,添加具體的header,設置代理服務(wù)器,超時(shí)設置,常見(jiàn)的網(wǎng)絡(luò )異常,然后介紹一個(gè)更加人性化的requests庫,結合百度< @貼吧的案例說(shuō)明了如何使用urllib庫爬取網(wǎng)頁(yè)數據。大家應該能熟練掌握這兩個(gè)庫的使用,反復使用多練習。另外,可以參考官網(wǎng)提供的文檔進(jìn)行深入研究。
第 5 部分
主要介紹了幾種解析網(wǎng)頁(yè)數據的技術(shù),包括正則表達式、XPath、Beautiful Soup和JSONPath,并講解了封裝這些技術(shù)的Python模塊或庫的基本使用,包括re模塊、lxml庫、bs4庫、json模塊、并結合騰訊社招網(wǎng)站的案例,分別講解如何使用re模塊、lxml庫和bs4庫來(lái)解析網(wǎng)頁(yè)數據,以便更好地區分這些技術(shù)之間的差異。在實(shí)際工作中,可以根據具體情況選擇合理的技術(shù)來(lái)使用。
第 6 部分
主要講解并發(fā)下載,包括多線(xiàn)程爬蟲(chóng)進(jìn)程分析,使用queue模塊實(shí)現多線(xiàn)程爬取,協(xié)程實(shí)現并發(fā)爬取。結合尷尬百科的案例,分別使用了單線(xiàn)程、多線(xiàn)程、協(xié)程三種技術(shù)。獲取網(wǎng)頁(yè)數據,分析三者的表現。
第 7 部分
介紹圍繞抓取動(dòng)態(tài)內容,包括動(dòng)態(tài)網(wǎng)頁(yè)介紹,selenium和PhantomJS概述,selenium和PhantomJS的安裝和配置,selenium和PhantomJS的基本使用,結合模擬豆瓣網(wǎng)站登陸的案例,在項目中解釋了項目如何應用 selenium 和 PhantomJS 技術(shù)。
第 8 部分
主要講解圖像識別和文字處理,包括Tesseract引擎、pytesseract和PIL庫的下載安裝、標準格式文本處理、驗證碼處理等,結合一個(gè)識別本地驗證碼圖片的小程序,講解如何使用 pytesseract 識別圖像中的驗證碼。
第 9 部分
主要介紹爬蟲(chóng)數據的存儲,包括數據存儲的介紹、MongoDB數據庫的介紹、使用PyMongo庫存儲在數據庫等,并結合豆瓣電影的案例講解如何抓取,從 網(wǎng)站 一步一步地解析和存儲電影信息。
第 10 部分
主要是對爬蟲(chóng)框架Scrapy的初步講解,包括常用爬蟲(chóng)框架介紹、Scrapy框架結構、運行流程、安裝、基本操作等。
第 11 部分
首先介紹Scrapy終端和核心組件。首先介紹了Scrapy終端的啟動(dòng)和使用,并用一個(gè)例子來(lái)鞏固。然后,詳細介紹了 Scrapy 框架的一些核心組件,包括 Spiders、Item Pipeline 和 Settings。最后結合斗魚(yú)App爬蟲(chóng)的案例,講解了如何使用。Scrapy 框架捕獲移動(dòng)應用程序的數據。
第 12 部分
繼續介紹自動(dòng)爬取網(wǎng)頁(yè)的爬蟲(chóng)CrawlSpider的知識,包括先了解爬蟲(chóng)類(lèi)CrawlSpider,CrawlSpider類(lèi)的工作原理,通過(guò)Rule類(lèi)確定爬取規則,通過(guò)LinkExtractor類(lèi)提取鏈接,以及開(kāi)發(fā)了一個(gè)CrawlSpider類(lèi)來(lái)爬取騰訊招聘網(wǎng)站的案例,并將這部分的知識點(diǎn)應用到案例中。
第 13 部分
圍繞Scrapy-Redis分布式爬蟲(chóng)進(jìn)行講解,包括完整的架構、運行流程、主要組件、Scrapy-Redis的基本使用、如何搭建Scrapy-Redis開(kāi)發(fā)環(huán)境等,并結合百度百科案例使用這些知識點(diǎn)。
以上就是成為Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握的核心技術(shù)。你想通了嗎?其實(shí),做一個(gè)網(wǎng)絡(luò )爬蟲(chóng)并不難。只要掌握科學(xué)的學(xué)習方法,將理論基礎與實(shí)踐經(jīng)驗相結合,就能快速掌握爬蟲(chóng)的核心技術(shù)。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一時(shí)間解決?(圖))
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看

在當今社會(huì ),如何有效地提取和利用信息已成為一個(gè)巨大的挑戰?;谶@個(gè)巨大的市場(chǎng)需求,履帶技術(shù)應運而生,這也是為什么對履帶工程師的需求與日俱增的原因。那么Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握哪些核心技術(shù)呢?以小編推出的《Python網(wǎng)絡(luò )爬蟲(chóng)解析》課程為例,內容涉及Scrapy框架、分布式爬蟲(chóng)等核心技術(shù)。下面一起來(lái)看看Python網(wǎng)絡(luò )爬蟲(chóng)的具體學(xué)習內容吧!
Python網(wǎng)絡(luò )爬蟲(chóng)課程簡(jiǎn)介:
為了讓具備Python基礎的人適合工作需要,小編推出了全面、系統、簡(jiǎn)單的Python網(wǎng)絡(luò )爬蟲(chóng)入門(mén)課程,不僅講解了學(xué)習網(wǎng)絡(luò )爬蟲(chóng)必備的基礎知識,還增加了一個(gè)爬蟲(chóng)框架。學(xué)習完內容后,您將能夠全面掌握爬取和解析網(wǎng)頁(yè)的各種技術(shù),還可以掌握爬蟲(chóng)的一些擴展知識,如并發(fā)下載、識別圖片文本、抓取動(dòng)態(tài)內容等。并且每個(gè)人都可以掌握爬蟲(chóng)框架的使用,比如Scrapy,從而創(chuàng )建自己的網(wǎng)絡(luò )爬蟲(chóng)項目,勝任Python網(wǎng)絡(luò )爬蟲(chóng)工程師相關(guān)的工作。
Python網(wǎng)絡(luò )爬蟲(chóng)知識大綱:
第1部分
主要是帶領(lǐng)大家了解網(wǎng)絡(luò )爬蟲(chóng),包括爬蟲(chóng)的背景、什么是爬蟲(chóng)、爬蟲(chóng)的目的、爬蟲(chóng)的分類(lèi)等。
第2部分
主要講解爬蟲(chóng)的實(shí)現原理和技術(shù),包括爬蟲(chóng)的實(shí)現原理、爬取網(wǎng)頁(yè)的詳細過(guò)程、通用爬蟲(chóng)中網(wǎng)頁(yè)的分類(lèi)、通用爬蟲(chóng)相關(guān)的網(wǎng)站文件、反爬蟲(chóng)響應策略,以及為什么選擇 Python 爬蟲(chóng)等。希望讀者能夠了解爬蟲(chóng)是如何爬取網(wǎng)頁(yè)的,對爬取過(guò)程中出現的一些問(wèn)題有一定的了解,以后會(huì )針對這些問(wèn)題提供一些合理的解決方案。
第 3 部分
主要介紹網(wǎng)頁(yè)請求的原理,包括瀏覽網(wǎng)頁(yè)的過(guò)程、HTTP網(wǎng)絡(luò )請求的原理、HTTP抓包工具Fiddler。
第 4 部分
介紹了兩個(gè)用于抓取 Web 數據的庫:urllib 和 requests。首先介紹了urllib庫的基本使用,包括使用urllib傳輸數據,添加具體的header,設置代理服務(wù)器,超時(shí)設置,常見(jiàn)的網(wǎng)絡(luò )異常,然后介紹一個(gè)更加人性化的requests庫,結合百度< @貼吧的案例說(shuō)明了如何使用urllib庫爬取網(wǎng)頁(yè)數據。大家應該能熟練掌握這兩個(gè)庫的使用,反復使用多練習。另外,可以參考官網(wǎng)提供的文檔進(jìn)行深入研究。
第 5 部分
主要介紹了幾種解析網(wǎng)頁(yè)數據的技術(shù),包括正則表達式、XPath、Beautiful Soup和JSONPath,并講解了封裝這些技術(shù)的Python模塊或庫的基本使用,包括re模塊、lxml庫、bs4庫、json模塊、并結合騰訊社招網(wǎng)站的案例,分別講解如何使用re模塊、lxml庫和bs4庫來(lái)解析網(wǎng)頁(yè)數據,以便更好地區分這些技術(shù)之間的差異。在實(shí)際工作中,可以根據具體情況選擇合理的技術(shù)來(lái)使用。
第 6 部分
主要講解并發(fā)下載,包括多線(xiàn)程爬蟲(chóng)進(jìn)程分析,使用queue模塊實(shí)現多線(xiàn)程爬取,協(xié)程實(shí)現并發(fā)爬取。結合尷尬百科的案例,分別使用了單線(xiàn)程、多線(xiàn)程、協(xié)程三種技術(shù)。獲取網(wǎng)頁(yè)數據,分析三者的表現。
第 7 部分
介紹圍繞抓取動(dòng)態(tài)內容,包括動(dòng)態(tài)網(wǎng)頁(yè)介紹,selenium和PhantomJS概述,selenium和PhantomJS的安裝和配置,selenium和PhantomJS的基本使用,結合模擬豆瓣網(wǎng)站登陸的案例,在項目中解釋了項目如何應用 selenium 和 PhantomJS 技術(shù)。
第 8 部分
主要講解圖像識別和文字處理,包括Tesseract引擎、pytesseract和PIL庫的下載安裝、標準格式文本處理、驗證碼處理等,結合一個(gè)識別本地驗證碼圖片的小程序,講解如何使用 pytesseract 識別圖像中的驗證碼。
第 9 部分
主要介紹爬蟲(chóng)數據的存儲,包括數據存儲的介紹、MongoDB數據庫的介紹、使用PyMongo庫存儲在數據庫等,并結合豆瓣電影的案例講解如何抓取,從 網(wǎng)站 一步一步地解析和存儲電影信息。
第 10 部分
主要是對爬蟲(chóng)框架Scrapy的初步講解,包括常用爬蟲(chóng)框架介紹、Scrapy框架結構、運行流程、安裝、基本操作等。
第 11 部分
首先介紹Scrapy終端和核心組件。首先介紹了Scrapy終端的啟動(dòng)和使用,并用一個(gè)例子來(lái)鞏固。然后,詳細介紹了 Scrapy 框架的一些核心組件,包括 Spiders、Item Pipeline 和 Settings。最后結合斗魚(yú)App爬蟲(chóng)的案例,講解了如何使用。Scrapy 框架捕獲移動(dòng)應用程序的數據。
第 12 部分
繼續介紹自動(dòng)爬取網(wǎng)頁(yè)的爬蟲(chóng)CrawlSpider的知識,包括先了解爬蟲(chóng)類(lèi)CrawlSpider,CrawlSpider類(lèi)的工作原理,通過(guò)Rule類(lèi)確定爬取規則,通過(guò)LinkExtractor類(lèi)提取鏈接,以及開(kāi)發(fā)了一個(gè)CrawlSpider類(lèi)來(lái)爬取騰訊招聘網(wǎng)站的案例,并將這部分的知識點(diǎn)應用到案例中。
第 13 部分
圍繞Scrapy-Redis分布式爬蟲(chóng)進(jìn)行講解,包括完整的架構、運行流程、主要組件、Scrapy-Redis的基本使用、如何搭建Scrapy-Redis開(kāi)發(fā)環(huán)境等,并結合百度百科案例使用這些知識點(diǎn)。
以上就是成為Python網(wǎng)絡(luò )爬蟲(chóng)需要掌握的核心技術(shù)。你想通了嗎?其實(shí),做一個(gè)網(wǎng)絡(luò )爬蟲(chóng)并不難。只要掌握科學(xué)的學(xué)習方法,將理論基礎與實(shí)踐經(jīng)驗相結合,就能快速掌握爬蟲(chóng)的核心技術(shù)。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 一個(gè)特別小的爬蟲(chóng)案例!微信推文中的圖片 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2022-02-22 05:05
一個(gè)特別小的爬蟲(chóng)案例!微信推文中的圖片
)
大家好,今天給大家分享一個(gè)非常小的爬蟲(chóng)案例!
在微信推文中抓取圖片?。。?!
有人說(shuō),這有什么用,,,,萬(wàn)一有人的推特是把一個(gè)PPT的內容以圖片的形式放上去,你想把它弄下來(lái),那就是爬。
歡迎關(guān)注嗶哩嗶哩UP主:《我的兒子Q》。
堅持不懈,努力工作;你和我在一起!為戰斗而生!
相信大家都聽(tīng)說(shuō)過(guò)爬蟲(chóng)技術(shù)。一旦你學(xué)會(huì )了這項技術(shù),你將成為資源老板。這條推文將在以下兩個(gè)方面展開(kāi):
1、爬蟲(chóng)科學(xué)
2、微信推文中的圖片
爬行動(dòng)物科學(xué)的定義
近年來(lái),爬蟲(chóng)這個(gè)詞廣為流傳,還有一個(gè)新興的職位——爬蟲(chóng)工程師。那么什么是爬行動(dòng)物?
下面是百度百科的解釋?zhuān)?br /> 網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
大概還是不明白。
其實(shí)通俗的說(shuō),就是在網(wǎng)絡(luò )上根據自己的需要,通過(guò)相應的技術(shù)手段來(lái)獲取我們需要的數據信息。這個(gè)過(guò)程稱(chēng)為爬行。
該網(wǎng)站是API。. .
我們說(shuō)網(wǎng)絡(luò )上的每一個(gè)網(wǎng)站都被視為一個(gè)API,也就是一個(gè)接口,通過(guò)它我們可以獲取信息和數據。一個(gè)網(wǎng)站叫做 URL,這個(gè) URL 就是我們爬取的 API。
爬蟲(chóng)無(wú)非就是以下幾個(gè)流程:
1、了解網(wǎng)頁(yè)
2、獲取網(wǎng)頁(yè)內容
3、解析網(wǎng)頁(yè)并選擇需要的內容
4、保存你想要的
兩個(gè)機器人協(xié)議
在爬取之前,你需要知道一些事情:
1、服務(wù)器上的數據是專(zhuān)有的。
2、網(wǎng)絡(luò )爬蟲(chóng)數據牟利存在法律風(fēng)險。
3、爬蟲(chóng)可能會(huì )丟失個(gè)人數據。
許多公司還對爬蟲(chóng)進(jìn)行了一些預防設置。一般會(huì )判斷你的訪(fǎng)問(wèn)來(lái)源,并嘗試判斷你是被人訪(fǎng)問(wèn)還是被機器訪(fǎng)問(wèn),從而做出必要的限制。
robots協(xié)議,也稱(chēng)為robots.txt,是大家都認同的爬蟲(chóng)協(xié)議。說(shuō)白了,就是爬蟲(chóng)的道德標準。很多公司會(huì )在它的一些網(wǎng)站上設置robots協(xié)議,這個(gè)協(xié)議會(huì )告訴你哪些內容網(wǎng)站允許你抓取,哪些內容不允許抓取。該協(xié)議是 網(wǎng)站 根目錄中的 robots.txt 文件。京東的機器人協(xié)議如下。
首先,我將向大家解釋這些的目的。也希望大家都能做一個(gè)合法的爬蟲(chóng),遵守網(wǎng)絡(luò )道德,做社會(huì )主義的接班人。不過(guò)普通的小爬蟲(chóng)是允許的,大家可以大膽嘗試。
三爬蟲(chóng)框架
目前爬蟲(chóng)已經(jīng)有比較成熟的框架和比較成熟的第三方庫供大家使用。
上面給出了兩個(gè)更成熟的爬蟲(chóng)庫。下面我們簡(jiǎn)單介紹一下Requests的使用。
首先,您需要安裝此庫。庫的安裝方法很簡(jiǎn)單。在 Windows 系統上,以管理員身份運行 cmd 并執行 pip install 請求。
安裝好之后就可以測試了。
爬蟲(chóng)的框架如下:
import requests # 導入requests庫def Get_Url_text(URL): # 定義獲取相應鏈接文本的函數 try:# 這里是異常處理機制 r = requests.get(url, timeout=30) # 訪(fǎng)問(wèn)這個(gè)鏈接,并返回一個(gè)名為r的對象 r.raise_for_status() # 返回訪(fǎng)問(wèn)的狀態(tài),若為200,即為訪(fǎng)問(wèn)成功 r.encoding = r.apparent_encoding # 將網(wǎng)頁(yè)的編碼和頭文件的編碼改為一致 except: return "產(chǎn)生異常"if __name__ = "main": url = "https://www.Baidu.com" print(Get_Url_text(url))
四個(gè)Requests庫的一些常用方法
requests庫的七種常用方法
這里有兩個(gè)對象,一個(gè)是訪(fǎng)問(wèn)的url,一個(gè)是返回的響應對象,也就是前面代碼中的r對象,其中也有返回對象的一些屬性。如下表所示。
微信推文爬取圖片示例
簡(jiǎn)單說(shuō)一下這里使用的python自帶的urllib中的request。但是整體的爬取思路是一樣的。還用到了其他一些庫,大家可以自行理解。代碼和解釋如下所示。
import urllib.requestimport re # 正則表達式庫import osimport urllib# 根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html.decode('UTF-8')def getImg(html): reg = r' src="(.+?)" ' # 括號里面就是我們要取得的圖片網(wǎng)址 imgre = re.compile(reg) imglist = imgre.findall(html) # 表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中 x = 0 path = 'D:\\python_project\\GRASP_pic_from_wechat\\pic' # 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建 if not os.path.isdir(path): os.makedirs(path) paths = path + '\\' # 保存在test路徑下 for imgurl in imglist: urllib.request.urlretrieve(imgurl, '{0}{1}.jpg'.format(paths, x)) # 打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串 x = x + 1 return imglisthtml = getHtml("https://mp.weixin.qq.com/s/z8p ... 6quot;) # 獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼print(getImg(html)) # 從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
好了,今天的內容就到此結束,希望對大家有所幫助,歡迎點(diǎn)贊轉發(fā)??!
發(fā)送封面:
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
一個(gè)特別小的爬蟲(chóng)案例!微信推文中的圖片
)

大家好,今天給大家分享一個(gè)非常小的爬蟲(chóng)案例!
在微信推文中抓取圖片?。。?!
有人說(shuō),這有什么用,,,,萬(wàn)一有人的推特是把一個(gè)PPT的內容以圖片的形式放上去,你想把它弄下來(lái),那就是爬。
歡迎關(guān)注嗶哩嗶哩UP主:《我的兒子Q》。
堅持不懈,努力工作;你和我在一起!為戰斗而生!
相信大家都聽(tīng)說(shuō)過(guò)爬蟲(chóng)技術(shù)。一旦你學(xué)會(huì )了這項技術(shù),你將成為資源老板。這條推文將在以下兩個(gè)方面展開(kāi):
1、爬蟲(chóng)科學(xué)
2、微信推文中的圖片

爬行動(dòng)物科學(xué)的定義
近年來(lái),爬蟲(chóng)這個(gè)詞廣為流傳,還有一個(gè)新興的職位——爬蟲(chóng)工程師。那么什么是爬行動(dòng)物?
下面是百度百科的解釋?zhuān)?br /> 網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中,更常被稱(chēng)為網(wǎng)頁(yè)追逐者)是根據一定的規則自動(dòng)爬取萬(wàn)維網(wǎng)上信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
大概還是不明白。

其實(shí)通俗的說(shuō),就是在網(wǎng)絡(luò )上根據自己的需要,通過(guò)相應的技術(shù)手段來(lái)獲取我們需要的數據信息。這個(gè)過(guò)程稱(chēng)為爬行。
該網(wǎng)站是API。. .
我們說(shuō)網(wǎng)絡(luò )上的每一個(gè)網(wǎng)站都被視為一個(gè)API,也就是一個(gè)接口,通過(guò)它我們可以獲取信息和數據。一個(gè)網(wǎng)站叫做 URL,這個(gè) URL 就是我們爬取的 API。
爬蟲(chóng)無(wú)非就是以下幾個(gè)流程:
1、了解網(wǎng)頁(yè)
2、獲取網(wǎng)頁(yè)內容
3、解析網(wǎng)頁(yè)并選擇需要的內容
4、保存你想要的
兩個(gè)機器人協(xié)議
在爬取之前,你需要知道一些事情:
1、服務(wù)器上的數據是專(zhuān)有的。
2、網(wǎng)絡(luò )爬蟲(chóng)數據牟利存在法律風(fēng)險。
3、爬蟲(chóng)可能會(huì )丟失個(gè)人數據。
許多公司還對爬蟲(chóng)進(jìn)行了一些預防設置。一般會(huì )判斷你的訪(fǎng)問(wèn)來(lái)源,并嘗試判斷你是被人訪(fǎng)問(wèn)還是被機器訪(fǎng)問(wèn),從而做出必要的限制。
robots協(xié)議,也稱(chēng)為robots.txt,是大家都認同的爬蟲(chóng)協(xié)議。說(shuō)白了,就是爬蟲(chóng)的道德標準。很多公司會(huì )在它的一些網(wǎng)站上設置robots協(xié)議,這個(gè)協(xié)議會(huì )告訴你哪些內容網(wǎng)站允許你抓取,哪些內容不允許抓取。該協(xié)議是 網(wǎng)站 根目錄中的 robots.txt 文件。京東的機器人協(xié)議如下。

首先,我將向大家解釋這些的目的。也希望大家都能做一個(gè)合法的爬蟲(chóng),遵守網(wǎng)絡(luò )道德,做社會(huì )主義的接班人。不過(guò)普通的小爬蟲(chóng)是允許的,大家可以大膽嘗試。

三爬蟲(chóng)框架
目前爬蟲(chóng)已經(jīng)有比較成熟的框架和比較成熟的第三方庫供大家使用。

上面給出了兩個(gè)更成熟的爬蟲(chóng)庫。下面我們簡(jiǎn)單介紹一下Requests的使用。
首先,您需要安裝此庫。庫的安裝方法很簡(jiǎn)單。在 Windows 系統上,以管理員身份運行 cmd 并執行 pip install 請求。

安裝好之后就可以測試了。

爬蟲(chóng)的框架如下:
import requests # 導入requests庫def Get_Url_text(URL): # 定義獲取相應鏈接文本的函數 try:# 這里是異常處理機制 r = requests.get(url, timeout=30) # 訪(fǎng)問(wèn)這個(gè)鏈接,并返回一個(gè)名為r的對象 r.raise_for_status() # 返回訪(fǎng)問(wèn)的狀態(tài),若為200,即為訪(fǎng)問(wèn)成功 r.encoding = r.apparent_encoding # 將網(wǎng)頁(yè)的編碼和頭文件的編碼改為一致 except: return "產(chǎn)生異常"if __name__ = "main": url = "https://www.Baidu.com" print(Get_Url_text(url))

四個(gè)Requests庫的一些常用方法
requests庫的七種常用方法

這里有兩個(gè)對象,一個(gè)是訪(fǎng)問(wèn)的url,一個(gè)是返回的響應對象,也就是前面代碼中的r對象,其中也有返回對象的一些屬性。如下表所示。

微信推文爬取圖片示例
簡(jiǎn)單說(shuō)一下這里使用的python自帶的urllib中的request。但是整體的爬取思路是一樣的。還用到了其他一些庫,大家可以自行理解。代碼和解釋如下所示。
import urllib.requestimport re # 正則表達式庫import osimport urllib# 根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼def getHtml(url): page = urllib.request.urlopen(url) html = page.read() return html.decode('UTF-8')def getImg(html): reg = r' src="(.+?)" ' # 括號里面就是我們要取得的圖片網(wǎng)址 imgre = re.compile(reg) imglist = imgre.findall(html) # 表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中 x = 0 path = 'D:\\python_project\\GRASP_pic_from_wechat\\pic' # 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建 if not os.path.isdir(path): os.makedirs(path) paths = path + '\\' # 保存在test路徑下 for imgurl in imglist: urllib.request.urlretrieve(imgurl, '{0}{1}.jpg'.format(paths, x)) # 打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串 x = x + 1 return imglisthtml = getHtml("https://mp.weixin.qq.com/s/z8p ... 6quot;) # 獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼print(getImg(html)) # 從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
好了,今天的內容就到此結束,希望對大家有所幫助,歡迎點(diǎn)贊轉發(fā)??!
發(fā)送封面:


網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)之旅學(xué)習文章目錄()-樂(lè )題庫 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 73 次瀏覽 ? 2022-02-20 04:15
)
Python爬蟲(chóng)學(xué)習
文章目錄
前言
寫(xiě)個(gè)項目書(shū)找資料真是大手筆,訓練模型采集圖片更煩人。我也復習了自己的python,于是開(kāi)始了python爬蟲(chóng)的旅程,這樣以后可以更方便的找資料。
一、什么是爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
爬蟲(chóng)是一段代碼,可以自動(dòng)從 Internet 上找到我需要的一些信息。例如,如果我想搜索一些信息,我可以搜索全世界。使用爬蟲(chóng),我們可以通過(guò)關(guān)鍵字過(guò)濾我們需要的內容?;蛘吣阆肟锤呤找暵实碾娪?。這時(shí)候也可以使用爬蟲(chóng)來(lái)查找一些收視率高的電影。
爬行動(dòng)物的矛和盾
1、防爬機制
2、反反爬策略
3、robots.txt(君子協(xié)議)
二、打開(kāi)一個(gè)小爬蟲(chóng)
使用軟件 Pycharm
爬蟲(chóng):通過(guò)編寫(xiě)程序獲取互聯(lián)網(wǎng)資源
要求:使用程序模擬瀏覽器。輸入從中獲取資源或內容的 URL
1、導入urlopen包
from urllib.request import urlopen
2、打開(kāi)一個(gè) URL 并獲得響應
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read()) #打印信息
前面有個(gè)b',代表字節,我們需要把字節轉成字符串
3、解碼
查看charest等號后面的內容,通過(guò)resp.read.decode()解碼
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read().decode("utf-8")) #打印解碼信息
4、保存到文件
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
with open("mybaidu.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")
這次信息保存在html文件中
5、打開(kāi)
這時(shí),百度就會(huì )打開(kāi)。
上面是我們搜索打開(kāi)百度的網(wǎng)址,下面的網(wǎng)址明顯不一樣
它的本質(zhì)是一樣的,你可以查看網(wǎng)頁(yè)的源代碼,你會(huì )發(fā)現源代碼是一樣的,上面也有提到
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
還能爬CCTV
from urllib.request import urlopen #導入urlopen
url = "http://v.cctv.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
#print(resp.read().decode("utf-8"))
with open("my2.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)之旅學(xué)習文章目錄()-樂(lè )題庫
)
Python爬蟲(chóng)學(xué)習
文章目錄
前言
寫(xiě)個(gè)項目書(shū)找資料真是大手筆,訓練模型采集圖片更煩人。我也復習了自己的python,于是開(kāi)始了python爬蟲(chóng)的旅程,這樣以后可以更方便的找資料。
一、什么是爬蟲(chóng)
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。
爬蟲(chóng)是一段代碼,可以自動(dòng)從 Internet 上找到我需要的一些信息。例如,如果我想搜索一些信息,我可以搜索全世界。使用爬蟲(chóng),我們可以通過(guò)關(guān)鍵字過(guò)濾我們需要的內容?;蛘吣阆肟锤呤找暵实碾娪?。這時(shí)候也可以使用爬蟲(chóng)來(lái)查找一些收視率高的電影。
爬行動(dòng)物的矛和盾
1、防爬機制
2、反反爬策略
3、robots.txt(君子協(xié)議)
二、打開(kāi)一個(gè)小爬蟲(chóng)
使用軟件 Pycharm
爬蟲(chóng):通過(guò)編寫(xiě)程序獲取互聯(lián)網(wǎng)資源
要求:使用程序模擬瀏覽器。輸入從中獲取資源或內容的 URL
1、導入urlopen包
from urllib.request import urlopen
2、打開(kāi)一個(gè) URL 并獲得響應
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read()) #打印信息

前面有個(gè)b',代表字節,我們需要把字節轉成字符串
3、解碼

查看charest等號后面的內容,通過(guò)resp.read.decode()解碼
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
print(resp.read().decode("utf-8")) #打印解碼信息

4、保存到文件
from urllib.request import urlopen #導入urlopen
url = "http://www.baidu.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
with open("mybaidu.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")



這次信息保存在html文件中
5、打開(kāi)

這時(shí),百度就會(huì )打開(kāi)。

上面是我們搜索打開(kāi)百度的網(wǎng)址,下面的網(wǎng)址明顯不一樣

它的本質(zhì)是一樣的,你可以查看網(wǎng)頁(yè)的源代碼,你會(huì )發(fā)現源代碼是一樣的,上面也有提到
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
還能爬CCTV
from urllib.request import urlopen #導入urlopen
url = "http://v.cctv.com/" #要爬取的網(wǎng)址
resp = urlopen(url) #打開(kāi)網(wǎng)址并返回響應
#print(resp.read().decode("utf-8"))
with open("my2.html",mode="w",encoding='utf-8') as f: #創(chuàng )建html文件并保存 ,encoding設置編碼
f.write(resp.read().decode("utf-8")) #讀取網(wǎng)頁(yè)的頁(yè)面源代碼
print("文件保存完成")

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 281 次瀏覽 ? 2022-02-19 21:14
)
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... %2339;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 39%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人)
)
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?

從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... %2339;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,



構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 39%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化

最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-02-19 21:10
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... 23x27;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists('D:\圖片'):
pass
else:
os.makedirs('D:\圖片')
path = 'D:\圖片\\'
for index,i in enumerate(pic_url):
filename = path + str(index) + '.jpg'
print(filename)
with open(filename, 'wb+') as f:
f.write(requests.get(i).content)
if __name__ == '__main__':
num = int(input('爬取幾次圖片:一次30張'))
down_img(num)
爬取過(guò)程
抓取結果
文章首次發(fā)表于: 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
什么是爬行動(dòng)物
網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在 FOAF 社區中更常稱(chēng)為網(wǎng)絡(luò )追逐者)是根據一定規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。其他不太常用的名稱(chēng)是 ant、autoindex、emulator 或 worm。(來(lái)源:百度百科)
爬蟲(chóng)協(xié)議
Robots Protocol(也稱(chēng)Crawler Protocol、Robot Protocol等)的全稱(chēng)是“Robots Exclusion Protocol”。網(wǎng)站 通過(guò) Robots Protocol 告訴搜索引擎哪些頁(yè)面可以爬取,哪些頁(yè)面不能爬取。
robots.txt 文件是一個(gè)文本文件,可以使用任何常見(jiàn)的文本編輯器(例如 Windows 附帶的記事本)創(chuàng )建和編輯。robots.txt 是協(xié)議,而不是命令。robots.txt 是搜索引擎在訪(fǎng)問(wèn) 網(wǎng)站 時(shí)查看的第一個(gè)文件。robots.txt 文件告訴蜘蛛可以查看服務(wù)器上的哪些文件。(來(lái)源:百度百科)
爬蟲(chóng)百度圖片
目標:爬取百度圖片并存入電腦
首先,數據是公開(kāi)的嗎?可以下載嗎?
從圖中可以看出,百度的圖片是完全可以下載的,說(shuō)明圖片可以爬取
首先,了解什么是圖片?
有形的東西,我們看,是圖片、照片、拓片等的統稱(chēng)。繪畫(huà)是技術(shù)制圖的一個(gè)基本術(shù)語(yǔ),是指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述的一種形式。事物的幾何特征、形狀、位置和大小。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖片以數字形式存儲。
那么圖片需要在哪里呢?
圖片保存在云服務(wù)器的數據庫中
每張圖片都有對應的url,通過(guò)requests模塊發(fā)起請求,以文件的wb+方式保存
import requests
r = requests.get('http://pic37.nipic.com/2014011 ... 23x27;)
with open('demo.jpg','wb+') as f:
f.write(r.content)
但是誰(shuí)寫(xiě)代碼是為了爬圖,還是直接下載比較好。爬蟲(chóng)的目的是達到批量下載的目的,這才是真正的爬蟲(chóng)
先了解json
JSON(JavaScript Object Notation,JS Object Notation)是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會(huì )開(kāi)發(fā)的 js 規范)的一個(gè)子集,使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔明了的層次結構使 JSON 成為理想的數據交換語(yǔ)言。
json是js的對象,就是訪(fǎng)問(wèn)數據
JSON字符串
{
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
Python字典
{
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
但是在python中,不能直接通過(guò)鍵值對獲取值,所以不得不說(shuō)python中的字典
在python中導入json,通過(guò)json.loads(s)將json數據轉成python數據(字典) -->
Ajax 代表“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),指的是一種用于創(chuàng )建交互式 Web 應用程序的 Web 開(kāi)發(fā)技術(shù)。
圖片是通過(guò)ajax方式加載的,也就是我下拉的時(shí)候會(huì )自動(dòng)加載圖片,因為網(wǎng)站會(huì )自動(dòng)發(fā)起請求,
構造ajax url請求將json轉成字典,通過(guò)取字典的鍵值對的值獲取圖片對應的url
import requests
import json
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)['data']
for index,i in enumerate(res):
url = i['hoverURL']
print(url)
with open( '{}.jpg'.format(index),'wb+') as f:
f.write(requests.get(url).content)
一個(gè)json有30張圖片,所以通過(guò)發(fā)出json請求,我們可以爬到30張,但是還是不夠。
首先分析不同json發(fā)起的請求
https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
其實(shí)可以發(fā)現,當再次發(fā)起請求時(shí),關(guān)鍵是pn在不斷變化
最后封裝代碼,一個(gè)list定義producer用來(lái)存儲不斷生成的圖片url,另一個(gè)list定義consumer用來(lái)保存圖片
# -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
for i in range(num):
page_url = 'https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290='.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)['data']
if res:
print(res)
for j in res:
try:
url = j['hoverURL']
pic_url.append(url)
except:
print('該圖片的url不存在')
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists('D:\圖片'):
pass
else:
os.makedirs('D:\圖片')
path = 'D:\圖片\\'
for index,i in enumerate(pic_url):
filename = path + str(index) + '.jpg'
print(filename)
with open(filename, 'wb+') as f:
f.write(requests.get(i).content)
if __name__ == '__main__':
num = int(input('爬取幾次圖片:一次30張'))
down_img(num)
爬取過(guò)程
抓取結果
文章首次發(fā)表于:
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python這把利器,開(kāi)啟網(wǎng)絡(luò )爬蟲(chóng)之路(1)(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 199 次瀏覽 ? 2022-02-19 11:21
摘要:獲取數據是數據分析的重要組成部分,網(wǎng)絡(luò )爬蟲(chóng)是獲取數據的重要渠道之一。鑒于此,我拿起了 Python 作為武器,開(kāi)始了爬網(wǎng)之路。本文使用的版本是python3.6,用于抓取深圳大學(xué)首頁(yè)的圖片信息和百度股票網(wǎng)某只股票的日K和月K數據。程序主要分為三個(gè)部分:網(wǎng)頁(yè)源代碼的獲取、所需內容的提取、所得結果的排列。
【歡迎關(guān)注、點(diǎn)贊、采集、私信、交流】一起學(xué)習進(jìn)步
獲取網(wǎng)頁(yè)源代碼 獲取百度圖片網(wǎng)頁(yè)
通過(guò)在百度圖片上隨機搜索關(guān)鍵詞,可以得到網(wǎng)頁(yè)地址并分析其規律性。發(fā)現可以通過(guò)修改地址末尾的word字段來(lái)搜索任意關(guān)鍵字的圖片。因此,我們通過(guò)自定義word字段,將自定義word字段添加到固有的URL格式中來(lái)獲取要爬取的網(wǎng)頁(yè)地址,并使用requests模塊中的get函數將網(wǎng)頁(yè)的源代碼下載到記憶。
如:
param={"word":"深圳大學(xué)"}
r=requests.get('/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=47_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width= &height=&face=0&istype=2&ie=utf-8&',params=param)
1.2 百度股票數據采集
百度互聯(lián)互通的信息在網(wǎng)頁(yè)上以動(dòng)畫(huà)的形式展示,例如:
從這種顯示數據的方式來(lái)看,直接從網(wǎng)頁(yè)中獲取所需的數據基本上是不可能的。因此,我們在巡視中打開(kāi)網(wǎng)絡(luò )查找動(dòng)畫(huà)中的數據源,如:
我們發(fā)現當月K按鈕被點(diǎn)擊時(shí),地址出現在網(wǎng)絡(luò )中。因此,當我們打開(kāi)地址時(shí),發(fā)現正是我們需要的數據。通過(guò)實(shí)驗發(fā)現,地址中的數據會(huì )根據時(shí)間的變化自動(dòng)更新。因此,復制地址,解析地址,得到要爬取的數據。
提取所需內容
2.1 從百度圖片中提取圖片地址
在解析網(wǎng)頁(yè)的時(shí)候,我們發(fā)現所有頁(yè)面的圖片地址都在thumb:字段后面,所以我們可以使用re模塊中的findall函數來(lái)匹配地址,如:
img_links=re.findall('"thumbURL":"(.*?)",',html)
獲取到地址后,同樣的方法可以使用requests.get將圖片信息下載到內存中。
2.2 提取百度股票信息
解析之前得到的數據,發(fā)現其內容是以每個(gè)日期為單位記錄的格式,而且非常有規律,如:{"errorNo":0,"errorMsg":"SUCCESS","mashData" :[ {"date":20180515,"kline":{"open":220.83999633789,"high":271.98001098633,"low":213.55599975586, "close":271.92001342773,"volume":39366713,"amount":0,"ccl":null,"preClose":272.26000976562,"netChangeRatio":-0. 201},
因此,同樣的方式,通過(guò)requests.get,我們可以得到我們需要的每一條信息,比如獲取零錢(qián):
monthnetchangeratio=re.findall('"netChangeRatio":(.*?)}',html)
爬取結果整理
3.1 百度圖片下載:
首先,創(chuàng )建一個(gè)保存圖片的文件夾:os.makedirs('./szdx/',exist_ok=True)
獲取到所有圖片的地址后,可以通過(guò)設置循環(huán)來(lái)一張一張下載圖片:
對于 img_links 中的鏈接:
picurl=鏈接
pic=requests.get(picurl)
打開(kāi) ('./szdx/img'+str(j)+'.jpg','wb') 作為 f:
對于 pic.iter_content(chunk_size=32):
f.write(塊)
f.close()
j=j+1#這里的j是為了防止在給每張圖片命名的時(shí)候重復命名。
3.2百度股票信息整理
在實(shí)驗中,我們使用字典來(lái)存儲股票信息,方便按日期順序檢索股票信息:
月數據={}
我=0
對于 d 日期:
數據={}
數據tmp={}
datatmp['open']=re.findall(d+',"kline":{"open":(.*?),"high"',html)
...(中間信息提取過(guò)程省略)
我=我+1
圖為每日K數據的第一個(gè)日期信息。
總結
通過(guò)這個(gè)實(shí)驗練習,我們熟悉了網(wǎng)頁(yè)的構成和數據爬取的基本原理。更重要的是,通過(guò)編程練習,我們發(fā)現了許多新的編程技能,并在實(shí)踐中不斷提高這些編程技能。經(jīng)過(guò)小組討論,確定了數據的來(lái)源,掌握了各種函數的使用方法,掌握了數據的最終存儲形式,最終完成了實(shí)驗。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python這把利器,開(kāi)啟網(wǎng)絡(luò )爬蟲(chóng)之路(1)(組圖))
摘要:獲取數據是數據分析的重要組成部分,網(wǎng)絡(luò )爬蟲(chóng)是獲取數據的重要渠道之一。鑒于此,我拿起了 Python 作為武器,開(kāi)始了爬網(wǎng)之路。本文使用的版本是python3.6,用于抓取深圳大學(xué)首頁(yè)的圖片信息和百度股票網(wǎng)某只股票的日K和月K數據。程序主要分為三個(gè)部分:網(wǎng)頁(yè)源代碼的獲取、所需內容的提取、所得結果的排列。
【歡迎關(guān)注、點(diǎn)贊、采集、私信、交流】一起學(xué)習進(jìn)步
獲取網(wǎng)頁(yè)源代碼 獲取百度圖片網(wǎng)頁(yè)
通過(guò)在百度圖片上隨機搜索關(guān)鍵詞,可以得到網(wǎng)頁(yè)地址并分析其規律性。發(fā)現可以通過(guò)修改地址末尾的word字段來(lái)搜索任意關(guān)鍵字的圖片。因此,我們通過(guò)自定義word字段,將自定義word字段添加到固有的URL格式中來(lái)獲取要爬取的網(wǎng)頁(yè)地址,并使用requests模塊中的get函數將網(wǎng)頁(yè)的源代碼下載到記憶。
如:
param={"word":"深圳大學(xué)"}
r=requests.get('/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=47_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width= &height=&face=0&istype=2&ie=utf-8&',params=param)
1.2 百度股票數據采集

百度互聯(lián)互通的信息在網(wǎng)頁(yè)上以動(dòng)畫(huà)的形式展示,例如:
從這種顯示數據的方式來(lái)看,直接從網(wǎng)頁(yè)中獲取所需的數據基本上是不可能的。因此,我們在巡視中打開(kāi)網(wǎng)絡(luò )查找動(dòng)畫(huà)中的數據源,如:

我們發(fā)現當月K按鈕被點(diǎn)擊時(shí),地址出現在網(wǎng)絡(luò )中。因此,當我們打開(kāi)地址時(shí),發(fā)現正是我們需要的數據。通過(guò)實(shí)驗發(fā)現,地址中的數據會(huì )根據時(shí)間的變化自動(dòng)更新。因此,復制地址,解析地址,得到要爬取的數據。
提取所需內容
2.1 從百度圖片中提取圖片地址
在解析網(wǎng)頁(yè)的時(shí)候,我們發(fā)現所有頁(yè)面的圖片地址都在thumb:字段后面,所以我們可以使用re模塊中的findall函數來(lái)匹配地址,如:
img_links=re.findall('"thumbURL":"(.*?)",',html)
獲取到地址后,同樣的方法可以使用requests.get將圖片信息下載到內存中。
2.2 提取百度股票信息
解析之前得到的數據,發(fā)現其內容是以每個(gè)日期為單位記錄的格式,而且非常有規律,如:{"errorNo":0,"errorMsg":"SUCCESS","mashData" :[ {"date":20180515,"kline":{"open":220.83999633789,"high":271.98001098633,"low":213.55599975586, "close":271.92001342773,"volume":39366713,"amount":0,"ccl":null,"preClose":272.26000976562,"netChangeRatio":-0. 201},
因此,同樣的方式,通過(guò)requests.get,我們可以得到我們需要的每一條信息,比如獲取零錢(qián):
monthnetchangeratio=re.findall('"netChangeRatio":(.*?)}',html)
爬取結果整理
3.1 百度圖片下載:
首先,創(chuàng )建一個(gè)保存圖片的文件夾:os.makedirs('./szdx/',exist_ok=True)
獲取到所有圖片的地址后,可以通過(guò)設置循環(huán)來(lái)一張一張下載圖片:
對于 img_links 中的鏈接:
picurl=鏈接
pic=requests.get(picurl)
打開(kāi) ('./szdx/img'+str(j)+'.jpg','wb') 作為 f:
對于 pic.iter_content(chunk_size=32):
f.write(塊)
f.close()
j=j+1#這里的j是為了防止在給每張圖片命名的時(shí)候重復命名。

3.2百度股票信息整理
在實(shí)驗中,我們使用字典來(lái)存儲股票信息,方便按日期順序檢索股票信息:
月數據={}
我=0
對于 d 日期:
數據={}
數據tmp={}
datatmp['open']=re.findall(d+',"kline":{"open":(.*?),"high"',html)
...(中間信息提取過(guò)程省略)
我=我+1

圖為每日K數據的第一個(gè)日期信息。
總結
通過(guò)這個(gè)實(shí)驗練習,我們熟悉了網(wǎng)頁(yè)的構成和數據爬取的基本原理。更重要的是,通過(guò)編程練習,我們發(fā)現了許多新的編程技能,并在實(shí)踐中不斷提高這些編程技能。經(jīng)過(guò)小組討論,確定了數據的來(lái)源,掌握了各種函數的使用方法,掌握了數據的最終存儲形式,最終完成了實(shí)驗。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生夏敏捷主編))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-02-18 11:06
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生夏敏捷主編)爬蟲(chóng)應用-抓百度圖片
爬取指定網(wǎng)頁(yè)中的圖片,需要經(jīng)過(guò)以下三個(gè)步驟:
?。?)指定網(wǎng)站的鏈接,抓取網(wǎng)站的源碼(如果用google瀏覽器,鼠標右鍵->Inspect->Elements中的html內容)
(2)設置正則表達式來(lái)匹配你要抓取的內容
(3)設置循環(huán)列表重復抓取和保存內容
下面介紹兩種方法來(lái)實(shí)現指定網(wǎng)頁(yè)中圖片的抓取
(1)方法一:使用正則表達式過(guò)濾抓取到的html內容字符串
# 第一個(gè)簡(jiǎn)單的爬取圖片的程序import urllib.request # python自帶的爬操作url的庫import re # 正則表達式# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # [^\s]*? 表示最小匹配, 兩個(gè)括號表示列表中有兩個(gè)元組 # imageList = re.findall(r'(https:[^\s]*?(png))"', page) imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page) x = 0 # 循環(huán)列表 for imageUrl in imageList: try: print('正在下載: %s' % imageUrl[0]) # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(imageUrl[0], image_save_path) x = x + 1 except: continue passif __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = "https://www.cnblogs.com/ttweix ... ot%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page) # print(page)
注意代碼中需要修改的是imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page)。如何設計正則表達式需要可以根據你要抓取的內容設置,我的設計來(lái)源如下:
可以看到,因為這個(gè)網(wǎng)頁(yè)上的圖片都是png格式的,所以也可以寫(xiě)成imageList = re.findall(r'(https:[^\s]*?(png))"', page) .
(2)方法二:使用BeautifulSoup庫解析html網(wǎng)頁(yè)
from bs4 import BeautifulSoup # BeautifulSoup是python處理HTML/XML的函數庫,是Python內置的網(wǎng)頁(yè)分析工具import urllib # python自帶的爬操作url的庫# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # 按照html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 格式化輸出DOM樹(shù)的內容 print(soup.prettify()) # 返回所有包含img標簽的列表,因為在Html文件中圖片的插入呈現形式是 imgList = soup.find_all('img') x = 0 # 循環(huán)找到的圖片列表,注意,這里手動(dòng)設置從第2張圖片開(kāi)始,是因為我debug看到了第一張圖片不是我想要的圖片 for imgUrl in imgList[1:]: print('正在下載:%s ' % imgUrl.get('src')) # 得到scr的內容,這里返回的就是Url字符串鏈接,如'https://img2020.cnblogs.com/bl ... 39%3B image_url = imgUrl.get('src') # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(image_url, image_save_path) x = x + 1if __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = 'https://www.cnblogs.com/ttweix ... 39%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page)
這兩種方法各有優(yōu)缺點(diǎn)。我認為它們可以靈活地組合使用。例如,使用方法2中指定標簽的方法來(lái)縮小要查找的內容的范圍,然后使用正則表達式匹配所需的內容。這樣做更簡(jiǎn)潔明了。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生夏敏捷主編))
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生夏敏捷主編)爬蟲(chóng)應用-抓百度圖片
爬取指定網(wǎng)頁(yè)中的圖片,需要經(jīng)過(guò)以下三個(gè)步驟:
?。?)指定網(wǎng)站的鏈接,抓取網(wǎng)站的源碼(如果用google瀏覽器,鼠標右鍵->Inspect->Elements中的html內容)
(2)設置正則表達式來(lái)匹配你要抓取的內容
(3)設置循環(huán)列表重復抓取和保存內容
下面介紹兩種方法來(lái)實(shí)現指定網(wǎng)頁(yè)中圖片的抓取
(1)方法一:使用正則表達式過(guò)濾抓取到的html內容字符串
# 第一個(gè)簡(jiǎn)單的爬取圖片的程序import urllib.request # python自帶的爬操作url的庫import re # 正則表達式# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # [^\s]*? 表示最小匹配, 兩個(gè)括號表示列表中有兩個(gè)元組 # imageList = re.findall(r'(https:[^\s]*?(png))"', page) imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page) x = 0 # 循環(huán)列表 for imageUrl in imageList: try: print('正在下載: %s' % imageUrl[0]) # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(imageUrl[0], image_save_path) x = x + 1 except: continue passif __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = "https://www.cnblogs.com/ttweix ... ot%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page) # print(page)
注意代碼中需要修改的是imageList = re.findall(r'(https:[^\s]*?(jpg|png|gif))"', page)。如何設計正則表達式需要可以根據你要抓取的內容設置,我的設計來(lái)源如下:

可以看到,因為這個(gè)網(wǎng)頁(yè)上的圖片都是png格式的,所以也可以寫(xiě)成imageList = re.findall(r'(https:[^\s]*?(png))"', page) .
(2)方法二:使用BeautifulSoup庫解析html網(wǎng)頁(yè)
from bs4 import BeautifulSoup # BeautifulSoup是python處理HTML/XML的函數庫,是Python內置的網(wǎng)頁(yè)分析工具import urllib # python自帶的爬操作url的庫# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 以下幾行注釋的代碼在本程序中有加沒(méi)加效果一樣,但是為了隱藏自己避免被反爬蟲(chóng)可以假如這個(gè)偽裝的頭部請求 headers = { 'User-Agent': 'Mozilla/5.0(Linux; Android 6.0; Nexus 5 Build/MRA58N) \ AppleWebKit/537.36(KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36' } # 將headers頭部添加到url,模擬瀏覽器訪(fǎng)問(wèn) url = urllib.request.Request(url, headers=headers) # 將url頁(yè)面的源代碼保存成字符串 page = urllib.request.urlopen(url).read() # 字符串轉碼 page = page.decode('UTF-8') return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImage(page): # 按照html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 格式化輸出DOM樹(shù)的內容 print(soup.prettify()) # 返回所有包含img標簽的列表,因為在Html文件中圖片的插入呈現形式是 imgList = soup.find_all('img') x = 0 # 循環(huán)找到的圖片列表,注意,這里手動(dòng)設置從第2張圖片開(kāi)始,是因為我debug看到了第一張圖片不是我想要的圖片 for imgUrl in imgList[1:]: print('正在下載:%s ' % imgUrl.get('src')) # 得到scr的內容,這里返回的就是Url字符串鏈接,如'https://img2020.cnblogs.com/bl ... 39%3B image_url = imgUrl.get('src') # 這個(gè)image文件夾需要先創(chuàng )建好才能看到結果 image_save_path = './image/%d.png' % x # 下載圖片并且保存到指定文件夾中 urllib.request.urlretrieve(image_url, image_save_path) x = x + 1if __name__ == '__main__': # 指定要爬取的網(wǎng)站 url = 'https://www.cnblogs.com/ttweix ... 39%3B # 得到該網(wǎng)站的源代碼 page = getHtmlCode(url) # 爬取該網(wǎng)站的圖片并且保存 getImage(page)
這兩種方法各有優(yōu)缺點(diǎn)。我認為它們可以靈活地組合使用。例如,使用方法2中指定標簽的方法來(lái)縮小要查找的內容的范圍,然后使用正則表達式匹配所需的內容。這樣做更簡(jiǎn)潔明了。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(通用網(wǎng)絡(luò )爬蟲(chóng)和聚焦爬蟲(chóng)(一):百度圖片爬取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 75 次瀏覽 ? 2022-02-17 17:21
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng)
根據使用場(chǎng)景,網(wǎng)絡(luò )爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng):是搜索引擎爬蟲(chóng)系統(百度、谷歌、雅虎等)的重要組成部分,它從互聯(lián)網(wǎng)上采集網(wǎng)頁(yè)和采集信息,這些網(wǎng)頁(yè)信息用于構建一個(gè)為搜索引擎提供支持的索引,它決定了整個(gè)引擎系統的內容是否豐富,信息是否即時(shí),所以其性能的好壞直接影響到搜索引擎的效果。主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。
聚焦爬蟲(chóng):是一種“面向特定主題需求”的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般搜索引擎爬蟲(chóng)的區別在于,焦點(diǎn)爬蟲(chóng)在實(shí)現網(wǎng)絡(luò )爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行處理和過(guò)濾,并盡量保證只爬取與需求相關(guān)的內容。網(wǎng)頁(yè)信息。也就是一般意義上的爬行動(dòng)物。
百度圖片爬取
需求分析,至少要實(shí)現兩個(gè)功能:一是搜索圖片,二是自動(dòng)下載
分析網(wǎng)頁(yè)(注意:不用的參數可以刪除不影響頁(yè)面加載)源碼,用F12
編寫(xiě)正則表達式或其他解析器代碼
本地存儲數據
正式寫(xiě)python爬蟲(chóng)代碼
頁(yè)面分析非常重要。不同的需求對應不同的URL,不同的URL的源碼明顯不同。因此,掌握如何分析頁(yè)面是爬蟲(chóng)成功的第一步。本頁(yè)源碼分析如下圖所示:
import os
import re
import requests
from colorama import Fore
def download_image(url, keyword):
"""
下載圖片
:param url: 百度圖片的網(wǎng)址
:return: Bool
"""
# 1. 向服務(wù)器發(fā)起HTTP請求
response = requests.get(url)
# 2. 獲取服務(wù)器端的響應信息
# 響應信息: status_code, text, url
data = response.text # 獲取頁(yè)面源碼
# 3. 編寫(xiě)正則表達式,獲取圖片的網(wǎng)址
# data = ...[{"ObjURL":"http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg",....}]...
# 需要獲取到的是: http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg
# 正則的語(yǔ)法: .代表除了\n之外的任意字符, *代表前一個(gè)字符出現0次或者無(wú)數次. ?代表非貪婪模式
pattern = r'"objURL":"(.*?)"'
# 4. 根據正則表達式尋找符合條件的圖片網(wǎng)址.
image_urls = re.findall(pattern, data)
# 5. 根據圖片網(wǎng)址下載貓的圖片到本地
index = 1
for image_url in image_urls:
print(image_url) # 'xxxx.jpg xxxx.png'
# response.text 返回 unicode 的文本信息, response.text 返回 bytes 類(lèi)型的信息
try:
response = requests.get(image_url) # 向每一個(gè)圖片的url發(fā)起HTTP請求
except Exception as e:
print(Fore.RED + "[-] 下載失?。?%s" % (image_url))
else:
old_image_filename = image_url.split('/')[-1]
if old_image_filename:
# 獲取圖片的后綴
image_format = old_image_filename.split('.')[-1]
# 處理 url 為...jpeg?imageview&thumbnail=550x0 結尾(傳參)的情況
if '?' in image_format:
image_format = image_format.split('?')[0]
else:
image_format = 'jpg'
# 生成圖片的存儲目錄
keyword = keyword.split(' ', '-')
if not os.path.exists(keyword):
os.mkdir(keyword)
image_filename = os.path.join(keyword, str(index) + '.' + image_format)
# 保存圖片
with open(image_filename, 'wb') as f:
f.write(response.content)
print(Fore.BLUE + "[+] 保存圖片%s.jpg成功" % (index))
index += 1
if __name__ == '__main__':
keyword = input("請輸入批量下載圖片的關(guān)鍵字: ")
url = 'http://image.baidu.com/search/index?tn=baiduimage&word=' + keyword
print(Fore.BLUE + '[+] 正在請求網(wǎng)址: %s' % (url))
download_image(url, keyword)
結果:
常見(jiàn)問(wèn)題:
為什么只有30張圖片,百度有30多張圖片
百度圖片是響應式的,下拉的時(shí)候會(huì )不斷的加載新的圖片,也就是說(shuō)瀏覽器中的頁(yè)面是通過(guò)JS處理數據的結果,Ajax爬蟲(chóng)的內容這里不再詳述。
搜索頁(yè)面下點(diǎn)擊單張圖片的url與程序中獲取的ObjURL不一致
這可能是百度緩存處理的結果。每張圖片本質(zhì)上都是“外網(wǎng)”,不是百度,所以在程序中,選擇向實(shí)際存儲圖片的url發(fā)起HTTP請求。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(通用網(wǎng)絡(luò )爬蟲(chóng)和聚焦爬蟲(chóng)(一):百度圖片爬取)
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng)
根據使用場(chǎng)景,網(wǎng)絡(luò )爬蟲(chóng)可以分為通用爬蟲(chóng)和專(zhuān)注爬蟲(chóng)。
萬(wàn)能網(wǎng)絡(luò )爬蟲(chóng):是搜索引擎爬蟲(chóng)系統(百度、谷歌、雅虎等)的重要組成部分,它從互聯(lián)網(wǎng)上采集網(wǎng)頁(yè)和采集信息,這些網(wǎng)頁(yè)信息用于構建一個(gè)為搜索引擎提供支持的索引,它決定了整個(gè)引擎系統的內容是否豐富,信息是否即時(shí),所以其性能的好壞直接影響到搜索引擎的效果。主要目的是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。

聚焦爬蟲(chóng):是一種“面向特定主題需求”的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般搜索引擎爬蟲(chóng)的區別在于,焦點(diǎn)爬蟲(chóng)在實(shí)現網(wǎng)絡(luò )爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行處理和過(guò)濾,并盡量保證只爬取與需求相關(guān)的內容。網(wǎng)頁(yè)信息。也就是一般意義上的爬行動(dòng)物。
百度圖片爬取
需求分析,至少要實(shí)現兩個(gè)功能:一是搜索圖片,二是自動(dòng)下載
分析網(wǎng)頁(yè)(注意:不用的參數可以刪除不影響頁(yè)面加載)源碼,用F12
編寫(xiě)正則表達式或其他解析器代碼
本地存儲數據
正式寫(xiě)python爬蟲(chóng)代碼
頁(yè)面分析非常重要。不同的需求對應不同的URL,不同的URL的源碼明顯不同。因此,掌握如何分析頁(yè)面是爬蟲(chóng)成功的第一步。本頁(yè)源碼分析如下圖所示:

import os
import re
import requests
from colorama import Fore
def download_image(url, keyword):
"""
下載圖片
:param url: 百度圖片的網(wǎng)址
:return: Bool
"""
# 1. 向服務(wù)器發(fā)起HTTP請求
response = requests.get(url)
# 2. 獲取服務(wù)器端的響應信息
# 響應信息: status_code, text, url
data = response.text # 獲取頁(yè)面源碼
# 3. 編寫(xiě)正則表達式,獲取圖片的網(wǎng)址
# data = ...[{"ObjURL":"http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg",....}]...
# 需要獲取到的是: http:\/\/images.freeimages.com\/images\/large-previews\/3bc\/calico-cat-outside-1561133.jpg
# 正則的語(yǔ)法: .代表除了\n之外的任意字符, *代表前一個(gè)字符出現0次或者無(wú)數次. ?代表非貪婪模式
pattern = r'"objURL":"(.*?)"'
# 4. 根據正則表達式尋找符合條件的圖片網(wǎng)址.
image_urls = re.findall(pattern, data)
# 5. 根據圖片網(wǎng)址下載貓的圖片到本地
index = 1
for image_url in image_urls:
print(image_url) # 'xxxx.jpg xxxx.png'
# response.text 返回 unicode 的文本信息, response.text 返回 bytes 類(lèi)型的信息
try:
response = requests.get(image_url) # 向每一個(gè)圖片的url發(fā)起HTTP請求
except Exception as e:
print(Fore.RED + "[-] 下載失?。?%s" % (image_url))
else:
old_image_filename = image_url.split('/')[-1]
if old_image_filename:
# 獲取圖片的后綴
image_format = old_image_filename.split('.')[-1]
# 處理 url 為...jpeg?imageview&thumbnail=550x0 結尾(傳參)的情況
if '?' in image_format:
image_format = image_format.split('?')[0]
else:
image_format = 'jpg'
# 生成圖片的存儲目錄
keyword = keyword.split(' ', '-')
if not os.path.exists(keyword):
os.mkdir(keyword)
image_filename = os.path.join(keyword, str(index) + '.' + image_format)
# 保存圖片
with open(image_filename, 'wb') as f:
f.write(response.content)
print(Fore.BLUE + "[+] 保存圖片%s.jpg成功" % (index))
index += 1
if __name__ == '__main__':
keyword = input("請輸入批量下載圖片的關(guān)鍵字: ")
url = 'http://image.baidu.com/search/index?tn=baiduimage&word=' + keyword
print(Fore.BLUE + '[+] 正在請求網(wǎng)址: %s' % (url))
download_image(url, keyword)
結果:

常見(jiàn)問(wèn)題:
為什么只有30張圖片,百度有30多張圖片
百度圖片是響應式的,下拉的時(shí)候會(huì )不斷的加載新的圖片,也就是說(shuō)瀏覽器中的頁(yè)面是通過(guò)JS處理數據的結果,Ajax爬蟲(chóng)的內容這里不再詳述。
搜索頁(yè)面下點(diǎn)擊單張圖片的url與程序中獲取的ObjURL不一致
這可能是百度緩存處理的結果。每張圖片本質(zhì)上都是“外網(wǎng)”,不是百度,所以在程序中,選擇向實(shí)際存儲圖片的url發(fā)起HTTP請求。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(fildder抓包來(lái)分析這些新聞網(wǎng)址等信息隱藏在那個(gè)地方 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 84 次瀏覽 ? 2022-02-16 05:21
)
先分析
打開(kāi)網(wǎng)站后,再打開(kāi)源碼,發(fā)現之前的一些新聞頭條在源碼中可以找到,而下面的頭條在源碼中找不到
這時(shí)候我們就需要使用fildder抓包來(lái)分析這些新聞的URL以及隱藏在那個(gè)地方的其他信息
這些有我們正在尋找的信息
我們復制網(wǎng)址在瀏覽器中打開(kāi)發(fā)現不是我們要找的源信息
復制這個(gè)url找到我們的源碼,比較兩個(gè)url的區別
t只是一個(gè)時(shí)間戳,我們將第二個(gè)URL改為
&ajax=json
我們可以通過(guò)上面的網(wǎng)址訪(fǎng)問(wèn)源代碼
我們受到下面藍色網(wǎng)址的啟發(fā),只需要通過(guò)以上網(wǎng)址的拼接來(lái)獲取我們的源代碼
1、首先定義我們要爬取哪些字段。這是在 items 中定義的
import scrapy
class BaidunewsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# pass
"""1定義爬取的東西"""
title=scrapy.Field()
link=scrapy.Field()
content=scrapy.Field()
2、編寫(xiě)爬蟲(chóng)文件
# -*- coding: utf-8 -*-
import scrapy
from baidunews.items import BaidunewsItem
from scrapy.http import Request
import re
class NewsSpider(scrapy.Spider):
name = 'news'
allowed_domains = ['news.baidu.com']
start_urls = ['http://news.baidu.com/widget%3 ... 39%3B]
all_id = ['LocalNews', 'civilnews', 'InternationalNews', 'EnterNews', 'SportNews', 'FinanceNews', 'TechNews',
'MilitaryNews', 'InternetNews', 'DiscoveryNews', 'LadyNews', 'HealthNews', 'PicWall']
all_url = []
for i in range(len(all_id)):
current_id = all_id[i]
current_url = 'http://news.baidu.com/widget?id=' + current_id + '&ajax=json'
all_url.append(current_url)
"""得到某個(gè)欄目塊的url"""
def parse(self, response):
for i in range(0, len(self.all_url)):
print("第" + str(i) + "個(gè)欄目")
yield Request(self.all_url[i], callback=self.next)
"""某個(gè)模塊下面的所有的新聞的url"""
def next(self, response):
data = response.body.decode('utf-8', 'ignore')
# print(self.all_url)
partten1 = '"url":"(.*?)"'
partten2 = '"m_url":"(.*?)"'
url1 = re.compile(partten1, re.S).findall(data)
url2 = re.compile(partten2, re.S).findall(data)
if (len(url1) != 0):
url = url1
else:
url = url2
# print(url)
# print("===========================")
for i in range(0, len(url)):
thisurl = re.sub(r"\\\/", '/', url[i])
# print(thisurl)
yield Request(thisurl, callback=self.next2,dont_filter=True) # thisurl是返回的值,回調函數調next2去處理,
def next2(self, response):
item = BaidunewsItem()
item['link'] = response.url
item['title'] = response.xpath("/html/head/title/text()").extract()
item['content'] = response.body
yield item
這里總結幾點(diǎn)
1、代碼中yieldRequest()中的第一個(gè)參數是yield生成器返回的值,第二個(gè)callback=XXX是接下來(lái)要調用的參數
2、yield Request(thisurl, callback=self.next2,dont_filter=True) 如果不加dont_filter=True,則無(wú)法獲取返回項
3 教我的大佬解釋說(shuō),allowed_domains = [''] 我們里面這個(gè)參數是設置成在URL中收錄這個(gè)來(lái)獲取我們想要的信息,比如current_url = '#39; + current_id + '&ajax=json ' 而且我們的每個(gè)欄目塊下都沒(méi)有一條新聞。只有加上上面dont_filter=True的參數才能返回我們的item信息
3、我們可以編寫(xiě)管道來(lái)查看一些返回的項目
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/late ... .html
class BaidunewsPipeline(object):
def process_item(self, item, spider):
# print("===========================")
print(item["title"].decode('utf-8')+item['link']+item['content'])
return item
4 我們還需要在執行代碼之前在設置中注冊
# -*- coding: utf-8 -*-
# Scrapy settings for baidunews project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
BOT_NAME = 'baidunews'
SPIDER_MODULES = ['baidunews.spiders']
NEWSPIDER_MODULE = 'baidunews.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'baidunews (+http://www.yourdomain.com)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/late ... delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
#COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/late ... .html
#SPIDER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/late ... .html
#DOWNLOADER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsDownloaderMiddleware': 543,
#}
# Enable or disable extensions
# See https://doc.scrapy.org/en/late ... .html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/late ... .html
#注冊pipeline
ITEM_PIPELINES = {
'baidunews.pipelines.BaidunewsPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/late ... .html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/late ... tings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
5然后我們就可以在命令行窗口成功執行scrapy爬取新聞了
6 下面是我們的目錄結構
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(fildder抓包來(lái)分析這些新聞網(wǎng)址等信息隱藏在那個(gè)地方
)
先分析

打開(kāi)網(wǎng)站后,再打開(kāi)源碼,發(fā)現之前的一些新聞頭條在源碼中可以找到,而下面的頭條在源碼中找不到

這時(shí)候我們就需要使用fildder抓包來(lái)分析這些新聞的URL以及隱藏在那個(gè)地方的其他信息

這些有我們正在尋找的信息

我們復制網(wǎng)址在瀏覽器中打開(kāi)發(fā)現不是我們要找的源信息

復制這個(gè)url找到我們的源碼,比較兩個(gè)url的區別
t只是一個(gè)時(shí)間戳,我們將第二個(gè)URL改為
&ajax=json
我們可以通過(guò)上面的網(wǎng)址訪(fǎng)問(wèn)源代碼
我們受到下面藍色網(wǎng)址的啟發(fā),只需要通過(guò)以上網(wǎng)址的拼接來(lái)獲取我們的源代碼

1、首先定義我們要爬取哪些字段。這是在 items 中定義的
import scrapy
class BaidunewsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# pass
"""1定義爬取的東西"""
title=scrapy.Field()
link=scrapy.Field()
content=scrapy.Field()
2、編寫(xiě)爬蟲(chóng)文件
# -*- coding: utf-8 -*-
import scrapy
from baidunews.items import BaidunewsItem
from scrapy.http import Request
import re
class NewsSpider(scrapy.Spider):
name = 'news'
allowed_domains = ['news.baidu.com']
start_urls = ['http://news.baidu.com/widget%3 ... 39%3B]
all_id = ['LocalNews', 'civilnews', 'InternationalNews', 'EnterNews', 'SportNews', 'FinanceNews', 'TechNews',
'MilitaryNews', 'InternetNews', 'DiscoveryNews', 'LadyNews', 'HealthNews', 'PicWall']
all_url = []
for i in range(len(all_id)):
current_id = all_id[i]
current_url = 'http://news.baidu.com/widget?id=' + current_id + '&ajax=json'
all_url.append(current_url)
"""得到某個(gè)欄目塊的url"""
def parse(self, response):
for i in range(0, len(self.all_url)):
print("第" + str(i) + "個(gè)欄目")
yield Request(self.all_url[i], callback=self.next)
"""某個(gè)模塊下面的所有的新聞的url"""
def next(self, response):
data = response.body.decode('utf-8', 'ignore')
# print(self.all_url)
partten1 = '"url":"(.*?)"'
partten2 = '"m_url":"(.*?)"'
url1 = re.compile(partten1, re.S).findall(data)
url2 = re.compile(partten2, re.S).findall(data)
if (len(url1) != 0):
url = url1
else:
url = url2
# print(url)
# print("===========================")
for i in range(0, len(url)):
thisurl = re.sub(r"\\\/", '/', url[i])
# print(thisurl)
yield Request(thisurl, callback=self.next2,dont_filter=True) # thisurl是返回的值,回調函數調next2去處理,
def next2(self, response):
item = BaidunewsItem()
item['link'] = response.url
item['title'] = response.xpath("/html/head/title/text()").extract()
item['content'] = response.body
yield item
這里總結幾點(diǎn)
1、代碼中yieldRequest()中的第一個(gè)參數是yield生成器返回的值,第二個(gè)callback=XXX是接下來(lái)要調用的參數
2、yield Request(thisurl, callback=self.next2,dont_filter=True) 如果不加dont_filter=True,則無(wú)法獲取返回項
3 教我的大佬解釋說(shuō),allowed_domains = [''] 我們里面這個(gè)參數是設置成在URL中收錄這個(gè)來(lái)獲取我們想要的信息,比如current_url = '#39; + current_id + '&ajax=json ' 而且我們的每個(gè)欄目塊下都沒(méi)有一條新聞。只有加上上面dont_filter=True的參數才能返回我們的item信息
3、我們可以編寫(xiě)管道來(lái)查看一些返回的項目
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/late ... .html
class BaidunewsPipeline(object):
def process_item(self, item, spider):
# print("===========================")
print(item["title"].decode('utf-8')+item['link']+item['content'])
return item
4 我們還需要在執行代碼之前在設置中注冊
# -*- coding: utf-8 -*-
# Scrapy settings for baidunews project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
# https://doc.scrapy.org/en/late ... .html
BOT_NAME = 'baidunews'
SPIDER_MODULES = ['baidunews.spiders']
NEWSPIDER_MODULE = 'baidunews.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'baidunews (+http://www.yourdomain.com)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/late ... delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16
# Disable cookies (enabled by default)
#COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
# 'Accept-Language': 'en',
#}
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/late ... .html
#SPIDER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsSpiderMiddleware': 543,
#}
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/late ... .html
#DOWNLOADER_MIDDLEWARES = {
# 'baidunews.middlewares.BaidunewsDownloaderMiddleware': 543,
#}
# Enable or disable extensions
# See https://doc.scrapy.org/en/late ... .html
#EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
#}
# Configure item pipelines
# See https://doc.scrapy.org/en/late ... .html
#注冊pipeline
ITEM_PIPELINES = {
'baidunews.pipelines.BaidunewsPipeline': 300,
}
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/late ... .html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/late ... tings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
5然后我們就可以在命令行窗口成功執行scrapy爬取新聞了
6 下面是我們的目錄結構

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 63 次瀏覽 ? 2022-02-16 05:20
)
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社,鄭秋生,夏九杰主編)爬蟲(chóng)應用——抓取百度圖片
本文使用請求庫抓取某網(wǎng)站的圖片。前面的博客章節介紹了如何使用 urllib 庫來(lái)爬取網(wǎng)頁(yè)。本文主要使用請求庫來(lái)抓取網(wǎng)頁(yè)內容。使用方法 基本一樣,但是請求方法比較簡(jiǎn)單
不要忘記爬蟲(chóng)的基本思想:
1.指定要爬取的鏈接,然后爬取網(wǎng)站源碼
2.提取你想要的內容,比如如果要爬取圖片信息,可以選擇用正則表達式過(guò)濾或者使用提取
標簽方法
3.循環(huán)獲取要爬取的內容列表并保存文件
這里的代碼和我博客前幾章的代碼(圖片爬蟲(chóng)系列一)的區別是:
1.reques庫用于提取網(wǎng)頁(yè)
2.保存圖片時(shí),后綴不固定使用png或jpg,而是圖片本身的后綴名
3.保存圖片時(shí)不使用urllib.request.urlretrieve函數,而是使用文件讀寫(xiě)操作保存圖片
具體代碼如下圖所示:
# 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { 'User-Agent': 'MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0' } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = 'UTF-8' # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all('img') x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get('src') # 排除 src='' 的情況 if imgUrl_src != '': print('正在下載第 %d : %s 張圖片' % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = 'https://www.hqu.edu.cn/' + imgUrl_src print('正在下載:%s' % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 '.jpg' p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, 'wb').write(ir.content) x = x + 1 except: continueif __name__ == '__main__': # 指定爬取圖片鏈接 url = 'https://www.hqu.edu.cn/index.htm' # 指定存儲圖片路徑 localPath = './img/' # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
注意我們之所以判斷圖片鏈接是否以“https://”開(kāi)頭,主要是因為我們需要一個(gè)完整的絕對路徑來(lái)下載圖片,而這個(gè)需要看網(wǎng)頁(yè)原代碼,選擇一個(gè)圖片,然后點(diǎn)擊html所在的代碼。 ,按住鼠標,可以看到絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖:
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生)
)
來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社,鄭秋生,夏九杰主編)爬蟲(chóng)應用——抓取百度圖片
本文使用請求庫抓取某網(wǎng)站的圖片。前面的博客章節介紹了如何使用 urllib 庫來(lái)爬取網(wǎng)頁(yè)。本文主要使用請求庫來(lái)抓取網(wǎng)頁(yè)內容。使用方法 基本一樣,但是請求方法比較簡(jiǎn)單
不要忘記爬蟲(chóng)的基本思想:
1.指定要爬取的鏈接,然后爬取網(wǎng)站源碼
2.提取你想要的內容,比如如果要爬取圖片信息,可以選擇用正則表達式過(guò)濾或者使用提取
標簽方法
3.循環(huán)獲取要爬取的內容列表并保存文件
這里的代碼和我博客前幾章的代碼(圖片爬蟲(chóng)系列一)的區別是:
1.reques庫用于提取網(wǎng)頁(yè)
2.保存圖片時(shí),后綴不固定使用png或jpg,而是圖片本身的后綴名
3.保存圖片時(shí)不使用urllib.request.urlretrieve函數,而是使用文件讀寫(xiě)操作保存圖片
具體代碼如下圖所示:
# 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { 'User-Agent': 'MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0' } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = 'UTF-8' # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, 'html.parser') # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all('img') x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get('src') # 排除 src='' 的情況 if imgUrl_src != '': print('正在下載第 %d : %s 張圖片' % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = 'https://www.hqu.edu.cn/' + imgUrl_src print('正在下載:%s' % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 '.jpg' p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, 'wb').write(ir.content) x = x + 1 except: continueif __name__ == '__main__': # 指定爬取圖片鏈接 url = 'https://www.hqu.edu.cn/index.htm' # 指定存儲圖片路徑 localPath = './img/' # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
注意我們之所以判斷圖片鏈接是否以“https://”開(kāi)頭,主要是因為我們需要一個(gè)完整的絕對路徑來(lái)下載圖片,而這個(gè)需要看網(wǎng)頁(yè)原代碼,選擇一個(gè)圖片,然后點(diǎn)擊html所在的代碼。 ,按住鼠標,可以看到絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖:

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(#第一次學(xué)習爬蟲(chóng)后,自己編碼抓取圖片' )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 70 次瀏覽 ? 2022-02-16 05:11
)
#第一次學(xué)爬蟲(chóng)后,自己編碼和抓圖
##下面介紹主要流程
先打開(kāi)一個(gè)你要抓圖的網(wǎng)頁(yè),我以''為例|
url = 'https://www.quanjing.com/creat ... 39%3B
2.然后閱讀網(wǎng)頁(yè)的源碼,我們可以在源碼中找到我們要抓取的圖片對應的鏈接|
這里可能有人文,網(wǎng)頁(yè)的源代碼在哪里?
答:右鍵找到網(wǎng)頁(yè)源代碼,或者直接F12
html = urllib.request.urlopen(url).read().decode('utf-8')
運行后,我們可以看到鏈接抓取成功,都是以列表的形式抓取的:
3.下面使用 urllib.request.urlretrieve(url, 'target address')
要從對應鏈接下載圖片,首先要把上面得到的字符串形式轉換成不帶“”的鏈接
html1 = i.replace('"','')``
4.批量下載到本地
```python
for i in page_list:
html1 = i.replace('"','')
print(html1)
global x
urllib.request.urlretrieve(html1, 'image\%s.jpg' % x)
x+=1
這里保存到py文件對應目錄下的image文件中
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(#第一次學(xué)習爬蟲(chóng)后,自己編碼抓取圖片'
)
#第一次學(xué)爬蟲(chóng)后,自己編碼和抓圖
##下面介紹主要流程
先打開(kāi)一個(gè)你要抓圖的網(wǎng)頁(yè),我以''為例|
url = 'https://www.quanjing.com/creat ... 39%3B
2.然后閱讀網(wǎng)頁(yè)的源碼,我們可以在源碼中找到我們要抓取的圖片對應的鏈接|
這里可能有人文,網(wǎng)頁(yè)的源代碼在哪里?
答:右鍵找到網(wǎng)頁(yè)源代碼,或者直接F12
html = urllib.request.urlopen(url).read().decode('utf-8')
運行后,我們可以看到鏈接抓取成功,都是以列表的形式抓取的:

3.下面使用 urllib.request.urlretrieve(url, 'target address')
要從對應鏈接下載圖片,首先要把上面得到的字符串形式轉換成不帶“”的鏈接
html1 = i.replace('"','')``
4.批量下載到本地
```python
for i in page_list:
html1 = i.replace('"','')
print(html1)
global x
urllib.request.urlretrieve(html1, 'image\%s.jpg' % x)
x+=1
這里保存到py文件對應目錄下的image文件中

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(在python學(xué)習之路(10):爬蟲(chóng)進(jìn)階,使用python爬取)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 84 次瀏覽 ? 2022-02-14 08:11
python學(xué)習之路(一0):高級爬蟲(chóng),用python爬取你喜歡的小說(shuō)
在這個(gè) 文章 中,我們使用 BeautifulSoup 爬取了一本小說(shuō)。這是學(xué)習BeautifulSoup后寫(xiě)的第一個(gè)小程序,但是感覺(jué)自己對BeautifulSoup的使用不夠熟練,所以再寫(xiě)一個(gè)爬蟲(chóng)。增強 BeautifulSoup 的使用。
本次抓取微信公眾號的文章標題、文章摘要、文章網(wǎng)址、文章封面圖片網(wǎng)址、公眾號名稱(chēng)等信息。
python學(xué)習之路(12):連接Mysql數據庫及簡(jiǎn)單的增刪改查查詢(xún)回滾操作)
在這個(gè)文章中,我們談到了mysql的使用,所以這次我們將抓取的數據存儲在數據庫中。
我們不應該忘記我們以前學(xué)過(guò)的知識。我們應該把以前學(xué)過(guò)的東西都應用到現在的學(xué)習中,這樣可以讓我們復習舊知識,更牢牢地掌握知識點(diǎn)。
微信文章捕獲的地址為:
這是搜狗微信的搜索頁(yè)面,里面的文章每隔幾個(gè)小時(shí)就會(huì )更新一次。所以在這里抓取 文章 是相當全面的。
想法
1、 研究網(wǎng)頁(yè)結構
2、 使用 BeautifulSoup 解析我們需要的信息
3、 將解析后的信息存入mysql數據庫
學(xué)習網(wǎng)絡(luò )結構
研究網(wǎng)頁(yè)的結構,當然是右鍵->檢查元素
但是很快我發(fā)現了一個(gè)問(wèn)題,每個(gè)頁(yè)面只有20篇微信文章文章,要查看更多,我必須點(diǎn)擊“加載更多”按鈕。首先想了一下能不能用python來(lái)點(diǎn)擊,但是網(wǎng)上找的方法太深奧了,對python的學(xué)習還沒(méi)有深入,所以決定換一種方式。
懂一點(diǎn)JS的人都知道,如果是做“加載更多”之類(lèi)的功能,就必須使用AJAX向服務(wù)器請求新的數據,所以在我點(diǎn)擊“加載更多”按鈕后,我使用了瀏覽器的網(wǎng)絡(luò )看到這個(gè)請求。
我猜這一定是請求新數據的接口,我們打開(kāi)看看
哈哈,這個(gè)頁(yè)面也是微信文章的頁(yè)面,簡(jiǎn)單多了,大大降低了我們分析的難度。
并且發(fā)現了另一種模式。此 URL 以 1.html 結尾。
如果我把它改成 2.html
哈哈,神奇的發(fā)現改成2.html還是可以訪(fǎng)問(wèn)的,所以我大膽猜測,這應該是頁(yè)數的意思。
我在上面的 URL 中發(fā)現的另一個(gè)有趣的事情是有一個(gè) PC_0。
所以我決定把它改成 pc_1 試試看。
還能訪(fǎng)問(wèn),看到這邊的信息讓我覺(jué)得這是不是文章的另一類(lèi)。
在審查了元素之后,這證實(shí)了我的懷疑。
經(jīng)過(guò)以上研究,以下地址
可以得出兩個(gè)結論:
1、后面的1.html是頁(yè)數,不同的數字代表不同的頁(yè)數。
2、 后面pc_0中的0代表分類(lèi),不同的數字代表不同的類(lèi)型。
有了這兩個(gè)結論,我們寫(xiě)一個(gè)抓微信文章的代碼就簡(jiǎn)單多了。
這個(gè)文章就寫(xiě)到這里了,后面我會(huì )根據這個(gè)文章得到的結論來(lái)談抓數據,因為我在研究這個(gè)網(wǎng)頁(yè)的時(shí)候也在寫(xiě)這個(gè)文章。我也寫(xiě)了代碼。這個(gè)文章會(huì )先解釋一下研究一個(gè)網(wǎng)頁(yè)的思路。等我把代碼寫(xiě)好整理后,分享給大家。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(在python學(xué)習之路(10):爬蟲(chóng)進(jìn)階,使用python爬取)
python學(xué)習之路(一0):高級爬蟲(chóng),用python爬取你喜歡的小說(shuō)
在這個(gè) 文章 中,我們使用 BeautifulSoup 爬取了一本小說(shuō)。這是學(xué)習BeautifulSoup后寫(xiě)的第一個(gè)小程序,但是感覺(jué)自己對BeautifulSoup的使用不夠熟練,所以再寫(xiě)一個(gè)爬蟲(chóng)。增強 BeautifulSoup 的使用。
本次抓取微信公眾號的文章標題、文章摘要、文章網(wǎng)址、文章封面圖片網(wǎng)址、公眾號名稱(chēng)等信息。
python學(xué)習之路(12):連接Mysql數據庫及簡(jiǎn)單的增刪改查查詢(xún)回滾操作)
在這個(gè)文章中,我們談到了mysql的使用,所以這次我們將抓取的數據存儲在數據庫中。
我們不應該忘記我們以前學(xué)過(guò)的知識。我們應該把以前學(xué)過(guò)的東西都應用到現在的學(xué)習中,這樣可以讓我們復習舊知識,更牢牢地掌握知識點(diǎn)。
微信文章捕獲的地址為:
這是搜狗微信的搜索頁(yè)面,里面的文章每隔幾個(gè)小時(shí)就會(huì )更新一次。所以在這里抓取 文章 是相當全面的。
想法
1、 研究網(wǎng)頁(yè)結構
2、 使用 BeautifulSoup 解析我們需要的信息
3、 將解析后的信息存入mysql數據庫
學(xué)習網(wǎng)絡(luò )結構
研究網(wǎng)頁(yè)的結構,當然是右鍵->檢查元素
但是很快我發(fā)現了一個(gè)問(wèn)題,每個(gè)頁(yè)面只有20篇微信文章文章,要查看更多,我必須點(diǎn)擊“加載更多”按鈕。首先想了一下能不能用python來(lái)點(diǎn)擊,但是網(wǎng)上找的方法太深奧了,對python的學(xué)習還沒(méi)有深入,所以決定換一種方式。
懂一點(diǎn)JS的人都知道,如果是做“加載更多”之類(lèi)的功能,就必須使用AJAX向服務(wù)器請求新的數據,所以在我點(diǎn)擊“加載更多”按鈕后,我使用了瀏覽器的網(wǎng)絡(luò )看到這個(gè)請求。
我猜這一定是請求新數據的接口,我們打開(kāi)看看
哈哈,這個(gè)頁(yè)面也是微信文章的頁(yè)面,簡(jiǎn)單多了,大大降低了我們分析的難度。
并且發(fā)現了另一種模式。此 URL 以 1.html 結尾。
如果我把它改成 2.html
哈哈,神奇的發(fā)現改成2.html還是可以訪(fǎng)問(wèn)的,所以我大膽猜測,這應該是頁(yè)數的意思。
我在上面的 URL 中發(fā)現的另一個(gè)有趣的事情是有一個(gè) PC_0。
所以我決定把它改成 pc_1 試試看。
還能訪(fǎng)問(wèn),看到這邊的信息讓我覺(jué)得這是不是文章的另一類(lèi)。
在審查了元素之后,這證實(shí)了我的懷疑。
經(jīng)過(guò)以上研究,以下地址
可以得出兩個(gè)結論:
1、后面的1.html是頁(yè)數,不同的數字代表不同的頁(yè)數。
2、 后面pc_0中的0代表分類(lèi),不同的數字代表不同的類(lèi)型。
有了這兩個(gè)結論,我們寫(xiě)一個(gè)抓微信文章的代碼就簡(jiǎn)單多了。
這個(gè)文章就寫(xiě)到這里了,后面我會(huì )根據這個(gè)文章得到的結論來(lái)談抓數據,因為我在研究這個(gè)網(wǎng)頁(yè)的時(shí)候也在寫(xiě)這個(gè)文章。我也寫(xiě)了代碼。這個(gè)文章會(huì )先解釋一下研究一個(gè)網(wǎng)頁(yè)的思路。等我把代碼寫(xiě)好整理后,分享給大家。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用Jsoup解析img標簽并提取里面的title和data-original屬性 )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-02-08 00:14
)
大家好,我是小北。
在普通的群聊中,有時(shí)會(huì )遇到那種欺負人。如果你不同意,你會(huì )開(kāi)始談?wù)撽庩?yáng)并發(fā)送各種表情符號。但是,你的微信表情總是一點(diǎn)點(diǎn),不夠個(gè)性,上網(wǎng)去百度太麻煩了。本文文章根據emoji中的關(guān)鍵詞網(wǎng)站下載emoji到本地,讓黑幫遠離你。
本文使用java的OKHttp框架作為爬蟲(chóng)抓取“post emoji”網(wǎng)站()的表情包,使用Jsoup框架解析抓取到的網(wǎng)頁(yè)。
馬文
OKHttp是一個(gè)優(yōu)秀的網(wǎng)絡(luò )請求框架,可以請求http、https、get()、post()、put()等請求方法。Jsoup是一個(gè)解析網(wǎng)頁(yè)的框架,可以像JS一樣使用。
com.squareup.okhttp3
okhttp
4.9.3
org.jsoup
jsoup
1.14.3
思路分析
打開(kāi)網(wǎng)站,搜索關(guān)鍵字[Loading Force]的表情包,打開(kāi)F12控制面板,可以看到每個(gè)表情包都收錄在div元素中,翻的時(shí)候可以讀取url地址這一頁(yè)??梢钥吹降谝豁?yè)最后一個(gè)數字是1,第二頁(yè)是2,第三頁(yè)是3。這個(gè)很容易做到,只需要改變數字即可。
String url = String.format("https://fabiaoqing.com/search/ ... ot%3B, "裝逼", 1);
public Request buildRequest(String url) {
Request request = new Request.Builder()
.url(url)
.build();
return request;
}
public Response getResponse( Request request) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
response = client.newCall(request).execute();
System.out.println(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
繼續查看網(wǎng)頁(yè)源碼,表情圖片隱藏在div層下的img表情中,使用Jsoup解析img標簽,提取里面的title和data-original屬性,作為文件名和內容圖片。
Map map = new HashMap();
Document document = Jsoup.parse(html);
Elements elements = document.getElementsByClass("ui image bqppsearch lazy");
for (Element element : elements) {
Attributes attributes = element.attributes();
String key = attributes.get("title").replaceAll("\\n", "").replaceAll("[/\\\\\\\\:*?|\\\"]", "");
String value = attributes.get("data-original");
map.put(key, value);
} 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用Jsoup解析img標簽并提取里面的title和data-original屬性
)
大家好,我是小北。

在普通的群聊中,有時(shí)會(huì )遇到那種欺負人。如果你不同意,你會(huì )開(kāi)始談?wù)撽庩?yáng)并發(fā)送各種表情符號。但是,你的微信表情總是一點(diǎn)點(diǎn),不夠個(gè)性,上網(wǎng)去百度太麻煩了。本文文章根據emoji中的關(guān)鍵詞網(wǎng)站下載emoji到本地,讓黑幫遠離你。
本文使用java的OKHttp框架作為爬蟲(chóng)抓取“post emoji”網(wǎng)站()的表情包,使用Jsoup框架解析抓取到的網(wǎng)頁(yè)。
馬文
OKHttp是一個(gè)優(yōu)秀的網(wǎng)絡(luò )請求框架,可以請求http、https、get()、post()、put()等請求方法。Jsoup是一個(gè)解析網(wǎng)頁(yè)的框架,可以像JS一樣使用。
com.squareup.okhttp3
okhttp
4.9.3
org.jsoup
jsoup
1.14.3
思路分析
打開(kāi)網(wǎng)站,搜索關(guān)鍵字[Loading Force]的表情包,打開(kāi)F12控制面板,可以看到每個(gè)表情包都收錄在div元素中,翻的時(shí)候可以讀取url地址這一頁(yè)??梢钥吹降谝豁?yè)最后一個(gè)數字是1,第二頁(yè)是2,第三頁(yè)是3。這個(gè)很容易做到,只需要改變數字即可。

String url = String.format("https://fabiaoqing.com/search/ ... ot%3B, "裝逼", 1);
public Request buildRequest(String url) {
Request request = new Request.Builder()
.url(url)
.build();
return request;
}
public Response getResponse( Request request) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
response = client.newCall(request).execute();
System.out.println(response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
繼續查看網(wǎng)頁(yè)源碼,表情圖片隱藏在div層下的img表情中,使用Jsoup解析img標簽,提取里面的title和data-original屬性,作為文件名和內容圖片。

Map map = new HashMap();
Document document = Jsoup.parse(html);
Elements elements = document.getElementsByClass("ui image bqppsearch lazy");
for (Element element : elements) {
Attributes attributes = element.attributes();
String key = attributes.get("title").replaceAll("\\n", "").replaceAll("[/\\\\\\\\:*?|\\\"]", "");
String value = attributes.get("data-original");
map.put(key, value);
}