国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python的圖片爬蟲程序設計

2018-02-26 12:23云洋
電子技術與軟件工程 2018年17期
關鍵詞:爬蟲瀏覽器網(wǎng)頁

云洋

摘要

互聯(lián)網(wǎng)中包含大量有價值的數(shù)據(jù),網(wǎng)絡爬蟲通過既定規(guī)則可以自動地抓取互聯(lián)網(wǎng)數(shù)據(jù)并下載至本地存儲。研究網(wǎng)絡爬蟲的工作原理和基于Python網(wǎng)絡信息爬取技術模塊功能,基于Requests-BeautifulSoup技術構建圖片爬蟲實現(xiàn)網(wǎng)頁圖片爬取,詳細闡述了百度貼吧美圖吧圖片爬蟲程序的采集、解析、爬取和存儲過程,實驗結果證明基于即thon的Requests-BeautifulSoup技術可快速構建圖片爬蟲程序?qū)崿F(xiàn)對網(wǎng)頁圖片數(shù)據(jù)的自動解析和爬取,程序簡單有效并且數(shù)據(jù)采集速度快。

【關鍵詞】Python語言 網(wǎng)絡爬蟲 Request-BeautifulSoup 圖片爬取

網(wǎng)絡爬蟲(Web Crawler)又稱網(wǎng)絡蜘蛛(Web Spider)是一個能夠根據(jù)既定規(guī)則自動提取網(wǎng)頁信息的程序,它模仿瀏覽器發(fā)出HTTP請求訪問網(wǎng)絡資源,自動獲取用戶需要的網(wǎng)頁數(shù)據(jù)。已有一些定向網(wǎng)站的網(wǎng)絡爬蟲,如QQ空間爬蟲一天可抓取400萬條日志、說說、個人信息等數(shù)據(jù);知乎爬蟲爬取各種話題下的優(yōu)質(zhì)答案;淘寶商品比價定向爬蟲爬取商品、評論及銷售數(shù)據(jù)。

Python是一種面向?qū)ο?、解釋型、帶有動態(tài)語義的高級程序設計語言,其語法簡潔清晰,并具有豐富和強大的類庫,Python語言支持覆蓋信息技術各領域的10萬個函數(shù)庫,依靠開源快速開發(fā),形成了全球最大的編程社區(qū)。2017年7月IEEE發(fā)布的編程語言排行榜中Python高居首位,基于Python的應用也在計算機各領域大放異彩。Python包含優(yōu)秀的網(wǎng)絡爬蟲框架和解析技術,Python語言簡單易用且提供了與爬蟲相關的urllib、requests、BeautifulSoup、Scrapy等模塊。urllib模塊提供了從萬維網(wǎng)中獲取數(shù)據(jù)的高層接口,Requests模擬瀏覽器自動發(fā)送HTTP/HTTPS請求并從互聯(lián)網(wǎng)獲取數(shù)據(jù),BeautifulSoup解析HTML/XML頁面獲取用戶需要的數(shù)據(jù)。本文基于Python的Requests-BeautifulSoup技術構建圖片爬蟲程序?qū)崿F(xiàn)對百度貼吧美圖圖片的快速爬取,并將這些圖片保存在本地,方便用戶離線瀏覽和進一步使用。

1 網(wǎng)絡爬蟲工作原理與Python爬蟲技術模塊功能

網(wǎng)絡爬蟲是按照一定規(guī)則能自動抓取互聯(lián)網(wǎng)數(shù)據(jù)的程序或者腳本。網(wǎng)絡爬蟲通過網(wǎng)絡請求從Web網(wǎng)站首頁或指定頁面開始解析網(wǎng)頁獲取所需內(nèi)容,并通過網(wǎng)頁中的鏈接地址不斷進入到下一個網(wǎng)頁,直到遍歷完這個網(wǎng)站所有的網(wǎng)頁或滿足爬蟲設定的停止條件為止。Python語言第三方網(wǎng)絡請求庫Requests模擬瀏覽器自動發(fā)送HTTP/HTTPS請求并從互聯(lián)網(wǎng)獲取數(shù)據(jù)。BeautifulSoup解析獲取的HTML/XML頁面為用戶抓取需要的數(shù)據(jù),Beautiful Soup自動將輸入文檔轉(zhuǎn)換為Unicode編碼,將輸出文檔轉(zhuǎn)換為utf-8編碼,從而節(jié)省編程時間。

1.1 網(wǎng)絡爬蟲的工作原理

網(wǎng)絡爬蟲爬取頁面就是模擬使用瀏覽器獲取頁面信息的過程,其爬取流程一般包含如下4個步驟:

(1)模擬瀏覽器發(fā)起請求:通過目標URL向服務器發(fā)起request請求,請求頭header一般包含請求類型、cookie信息以及瀏覽器類型信息等;

(2)獲取服務器頁面響應:在服務器正常響應的情況下,用戶會收到所請求網(wǎng)頁的response,一般包含HTML、Json字符串或其他二進制格式數(shù)據(jù)(如視頻,圖片)等;

(3)獲取頁面內(nèi)容解析:用相應的解析器或轉(zhuǎn)換方法處理獲取的網(wǎng)頁內(nèi)容,如用網(wǎng)頁解析器解析HTML代碼,如果是二進制數(shù)據(jù)(如視頻、圖片),則保存到文件進一步待處理;

(4)存儲數(shù)據(jù):網(wǎng)頁解析獲取的數(shù)據(jù)可以用CSV、Json、text、圖片等文件存儲,也可以sqlite、MySQL或者MongoDB等數(shù)據(jù)庫存儲。

1.2 Python第三方庫Requests模塊

Requests是用Python語言編寫,使用Apache2 Licensed許可證的HTTP庫。Python標準庫中自帶的urllib2模塊和httplib模塊提供了所需要的大多數(shù)HTTP功能,Requests使用URllib3模塊,支持HTTP連接保持和連接池,支持使用cookie保持會話,支持文件上傳,支持自動確定響應內(nèi)容的編碼,支持國際化的URL和POST數(shù)據(jù)自動編碼。

通過pip命令($pip install requests)安裝Requests模塊。URllib提供了一系列用于操作URL的功能,URllib的request模塊可以方便地訪問抓取URL(統(tǒng)一資源定位符)內(nèi)容,URllib.request模塊中常用的函數(shù)方法如表I所示。使用requests方法后,會返回一個response對象存儲服務器響應的內(nèi)容,如r.status_code(響應狀態(tài)碼)、r.text(字符串方式的響應體,會自動根據(jù)響應頭部的字符編碼進行解碼)、r.Json(Requests中內(nèi)置的JSON解碼器)、r.content(字節(jié)方式的響應體,會自動為你解碼gzip和deflate壓縮)等。

1.3 Python第三方庫Beautiful Soup模塊

Beautiful Soup是用Python寫的一個HTML/XML的解析器,它可以處理不規(guī)范標記并生成分析樹(parse tree),同時提供了簡單的python函數(shù)處理導航(navigating)、搜索并修改分析樹。

通過pip命令安裝($pip installbeautifulsoup4)Beautiful Soup模塊。BeautifulSoup將HTML文檔轉(zhuǎn)換成一個樹形結構,每個節(jié)點都是Python的對象,所有對象可歸納為4種,如表2所示。

2 貼吧圖片爬蟲程序設計

百度貼吧是全球最大的中文社區(qū)。貼吧是一種基于關鍵詞的主題交流社區(qū),貼吧結合搜索引擎建立一個在線的交流平臺,讓那些對同一個話題感興趣的人們聚集在一起,方便地展開交流和互相幫助。設計爬蟲程序爬取百度帖吧(http://tieba.baidu.com)內(nèi)的美圖吧圖片,運行爬蟲程序時提示用戶輸入想要爬取網(wǎng)站的url,爬蟲程序修改請求頭信息,模擬瀏覽器對貼吧內(nèi)的帖子依次使用get請求,進入帖子后根據(jù)規(guī)則找到所有圖片標簽,獲取帖子內(nèi)的圖片資源url,并將其依次下載到本地存儲,所有帖子爬取完成后按enter退出,運行中途也可以使用ctrl+c強制退出程序。

基于Python的Requests-BeautifulSoup技術構建圖片爬蟲程序,使用requests模擬瀏覽器請求網(wǎng)頁,用random生成隨機數(shù)選取模擬的瀏覽器,用BeautifulSoup支持的Python內(nèi)置標準HTML解析庫解析請求網(wǎng)頁返回的數(shù)據(jù),使用urllib.request.URLretrieve()下載圖片和各種網(wǎng)絡請求。

2.1 爬蟲準備

開發(fā)圖片爬蟲程序使用Python3.6版本,主要用到了urllib的requests模塊、BeautifulSoup模塊和random模塊,模塊是包含變量、函數(shù)或類的定義程序文件,使用模塊前通過import導入這些模塊。定義了兩個全局變量null和true并初始化,以避免當訪問網(wǎng)址url中出現(xiàn)null和true字樣時,Python會將null和true當成變量未初始化而報錯。

import urllib.request

from bs4 import BeautifulSoup

import random

global null#設置了兩個全局變量null和true并初始化

null="

global true

true-

2.2 定義圖片抓取函數(shù)

定義圖片抓取函數(shù)get_images(),使用BeautifulSoup解析獲取網(wǎng)頁,找到所有圖片標簽,從每個圖片標簽中下載圖片并重命名到本地保存,其代碼如下所示。

def get_images(info):#定義圖片抓取函數(shù)

soup=BeautifulSoup(info,'html.parser')#創(chuàng)建beautifulsoup對象soup

all_img=soup.find_all('img',class_='BDE Image')#找到所有圖片標簽

for img in all_img:#從每一個圖片標簽中下載圖片并重命名

image_name='%s.jpg'%img['src']

image_name=image_name.replace('jpg';a')

image_name=image_name+'.jpg'

image_name=image_name[-22:]

urllib.request.urlretrieve(img['src'],image_name)#下載圖片保存到本地文件image_name

print('成功抓取到圖片',img['src'])

print('抓取完成!')

2.3 模擬瀏覽器訪問網(wǎng)站

爬蟲程序模擬瀏覽器發(fā)送HTTP/HTTPS請求并從互聯(lián)網(wǎng)獲取數(shù)據(jù)。用戶代理UserAgent是Http協(xié)議的一部分,是請求頭信息的一部分。random是Python標準庫的模塊,用戶可以直接調(diào)用random的方法random.randint(a,b)生成一個指定范圍內(nèi)的整數(shù),其中參數(shù)a是下限,參數(shù)b是上限,下限必須小于上限??捎迷摵瘮?shù)生成隨機整數(shù)用于選取模擬的瀏覽器。訪問網(wǎng)站時通過用戶代理向服務器提供用戶使用的瀏覽器版本及類型,通過改寫User-Agent將Python爬蟲模擬成瀏覽器。如下代碼模擬不同瀏覽器型號并進入百度帖吧首頁。

Agent=['Mozilla/5.0(Macintosh;U;IntelMac OS X 10_6_8;en-us)AppleWebKit/534.50(KHTML,like Gecko)Version/5.1',

'Mozilla/4.0(compatible;MSIE 8.0;Windows NT6.0;Trident/4.0)',

'Mozilla/4.0(compatible;MSIE 7.0;Windows NT5.1;Maxthon 2.0)',

'Mozilla/4.0(compatible;MSIE 7.0;Windows NT5.1;The World)',

'Mozilla/5.0(Windows NT6.1;rv:2.0.1)Gecko/20100101 Firefox/4.0.1']

yemian=input('輸入要抓取的貼吧地址:')

req=urllib.request.Request(yemian)#用Request構建添加headers信息的完整URL請求

req.add_header('Host','tieba.baidu.com')#添加請求頭信息Host、Referer、User-Agent

req.add_header('Referer','http://tieba.baidu.com/')

req.add_header('User-Agent',Agent[random.randint(0,4)])#用random生成隨機數(shù)選取模擬的瀏覽器

2.4 進入帖子爬取圖片核心代碼

爬蟲主體程序核心代碼如下,通過urllib的requests和URLopen()方法模擬瀏覽器訪問網(wǎng)站獲取網(wǎng)頁數(shù)據(jù),用BeautifulSoup的findall()解析獲取的網(wǎng)頁數(shù)據(jù),進入帖子內(nèi)抓取帶有圖片標簽的圖片文件并下載保存在本地磁盤。運行圖片爬蟲程序后爬取下載的帖吧圖片存儲如圖1所示。

html=urllib.request.URLopen(req)#打開一個URL請求返回一個文件對象hunt

string=html.read()

soup=BeautifulSoup(string;'html.parser')#用Python標準庫解析請求網(wǎng)頁返回的數(shù)據(jù)

all_img=soup.find_all('li',class_='j_thread_list')#返回文檔中符合條件的所有標簽tag

for img in all img:#從圖片連接中下載圖片

a=eval(img['data-field'])

b=a['id']

URL2='http://tieba.baidu.com/p/%s'%b

req2=urllib.request.Request(URL2)

req2.add_header('Host','tieba.baidu.con')

req2.add header('Referer','http://tieba.baidu.com/')

req2.add_header('User-Agent',Agent[random.randint(0,4)])

html2=urllib.request.urlopen(req2)

info=html2.readQ

get_images(info)

print('全部抓取完成.')

input()#程序運行結束后等待用戶輸入回車鍵再退出

3 結束語

本文研究了網(wǎng)絡爬蟲的工作原理和Python構建爬蟲的相關技術模塊,討論了Python構建爬蟲的模塊urllib、BeautifulSoup和random的功能用法。以百度貼吧圖片爬蟲構建為例,從爬蟲準備、模擬瀏覽器登陸網(wǎng)站、定義圖片爬取函數(shù)、進入貼吧解析網(wǎng)頁、爬取圖片存儲等方面詳細闡述了采用Python的Requests-BeautifulSoup技術構建圖片爬蟲程序抓取百度貼吧美圖吧圖片的過程。實驗結果證明基于Python的Requests-BeautifulSoup技術可快速有效地構建圖片爬蟲程序?qū)崿F(xiàn)對網(wǎng)頁圖片數(shù)據(jù)的自動解析和爬取。

參考文獻

[1]郭麗蓉.基于Python的網(wǎng)絡爬蟲程序設計[J].電子技術與軟件工程,2017(23):248-249.

[2]賈棋然.基于Python專用型網(wǎng)絡爬蟲的設計及實現(xiàn)[J].電腦知識與技術,2017(12):47-49.

[3]劉艷平,俞海英,戎沁.Python模擬登錄網(wǎng)站并抓取網(wǎng)頁的方法[J].微型電腦應用,2015,31(01):58-60.

[4]涂輝,王峰,商慶偉.Python3編程實現(xiàn)網(wǎng)絡爬蟲[J].電腦編程技巧與維護,2017(23):21-22.

[5]周中華,張惠然,謝江.基于Python的新浪微博數(shù)據(jù)爬蟲[J].計算機應用,2014,34(11):3131-3134.

猜你喜歡
爬蟲瀏覽器網(wǎng)頁
利用網(wǎng)絡爬蟲技術驗證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡爬蟲和反爬蟲技術研究
反瀏覽器指紋追蹤
基于CSS的網(wǎng)頁導航欄的設計
利用爬蟲技術的Geo-Gnutel la VANET流量采集
基于URL和網(wǎng)頁類型的網(wǎng)頁信息采集研究
大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡爬蟲技術
環(huán)球瀏覽器
網(wǎng)頁制作在英語教學中的應用
10個必知的網(wǎng)頁設計術語
404 Not Found

404 Not Found


nginx
福泉市| 泽州县| 桂林市| 桑日县| 左贡县| 舞钢市| 平乡县| 曲阜市| 广宗县| 汶上县| 德阳市| 宝坻区| 东宁县| 大足县| 双柏县| 江安县| 武山县| 栾城县| 娱乐| 盱眙县| 锡林浩特市| 内乡县| 衢州市| 高阳县| 盐亭县| 肥城市| 工布江达县| 凤冈县| 南汇区| 托克逊县| 塔城市| 高淳县| 九龙坡区| 鸡西市| 綦江县| 托克逊县| 高碑店市| 林甸县| 穆棱市| 黄骅市| 图木舒克市|