第一個python爬蟲_Python爬蟲01——第一個小爬蟲

Python小爬蟲——貼吧圖片的爬取

在對Python有了一定的基礎學習后,進行貼吧圖片抓取小程序的編寫。

目標:

首先肯定要實現圖片抓取這個基本功能

然后實現對用戶所給的鏈接進行抓取

最后要有一定的交互,程序不能太傻吧

一、頁面獲取

要讓python可以進行對網頁的訪問,那肯定要用到urllib之類的包。So先來個 import urllib

urllib中有 urllib.urlopen(str) 方法用于打開網頁并返回一個對象,調用這個對象的read()方法后能直接獲得網頁的源代碼,內容與瀏覽器右鍵查看源碼的內容一樣。

1 #coding:utf-8

2 importurllib3

4 page = urllib.urlopen('http://tieba.baidu.com/p/1753935195')#打開網頁

5 htmlcode = page.read()#讀取頁面源碼

6 print htmlcode#在控制臺輸出

運行結果與查看源碼其實差不多

運行結果就不放上來了

也可以寫到文本文檔中:

1 #coding:utf-8

2 importurllib3

4 page = urllib.urlopen('http://tieba.baidu.com/p/1753935195')5 htmlcode =page.read()6 #print htmlcode

7

8 pageFile = open('pageCode.txt','w')#以寫的方式打開pageCode.txt

9 pageFile.write(htmlcode)#寫入

10 pageFile.close()#開了記得關

運行一遍,txt就出現在了getJpg.py

1006376-20160810160113481-775871590.jpg的目錄下

好了別鬧,我們把它封裝成方法:

1 defget_html(url):2 page =urllib.urlopen(url)3 html =page.read()4 return html

然后我們的頁面獲取代碼就K.O.了

二、圖片(目標)的提取

做完上面步驟,你打開txt一看,我去!這都是什么跟什么啊,根本找不到圖片在哪好伐?

客官別急啊,我這就去給你叫我們的小。。。圖片!圖片!

首先我們要一個正則表達式 (什么你不會?請看菜鳥入門教程-->

然后我們看源代碼,Yeah 我們找到了其中一張圖片是這樣的

1006376-20160810172938809-900367175.png

寫出圖片的正則表達式: reg = r'src="(.+?\.jpg)" width'

解釋下吧——匹配以src="開頭然后接一個或多個任意字符(非貪婪),以.jpg" width結尾的字符串。比如圖中紅框內src后 雙引號里的鏈接就是一個匹配的字符串。

接著我們要做的就是從get_html方法返回的辣么長一串字符串中 拿到 滿足正則表達式的 字符串。

用到python中的re庫中的 re.findall(str) 它返回一個滿足匹配的字符串組成的列表

1 #coding:utf-8

2 importurllib3 importre4

5 defget_html(url):6 page =urllib.urlopen(url)7 html =page.read()8 returnhtml9

10 reg = r'src="(.+?\.jpg)" width'#正則表達式

11 reg_img = re.compile(reg)#編譯一下,運行更快

12 imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))#進行匹配

13 for img inimglist:14 print img

打印出這么多圖片鏈接

1006376-20160810171013934-1574238132.png

光把鏈接拿出來沒用啊,我們的目標是下載下來~

urllib庫中有一個 urllib.urlretrieve(鏈接,名字) 方法,它的作用是以第二個參數為名字下載鏈接中的內容,我們來試用一下

在上面代碼循環中加上 urllib.urlretrieve(img, 'tieba.jpg')

1006376-20160810171535652-1381674384.png

臥槽!!!怎么只下了一張

至少它下載了不是?啪啪啪啪啪(掌聲)

檢查下問題出在哪。。。。

沒錯我們只給了一個tieba.jpg的名字,后來的把前面的覆蓋了。

調整下代碼:

1 #coding:utf-8

2 importurllib3 importre4

5 defget_html(url):6 page =urllib.urlopen(url)7 html =page.read()8 returnhtml9

10 reg = r'src="(.+?\.jpg)" width'

11 reg_img =re.compile(reg)12 imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))13 x =014 for img inimglist:15 urllib.urlretrieve(img, '%s.jpg' %x)16 x += 1

啪啪啪啪啪

1006376-20160811151624512-587935525.png

第一步完成~

三、指定鏈接抓取

我想要抓另一個帖子,總不能打開源代碼,然后把那段地址改了在運行吧。

只是一個小程序,那也不行欸,加一個讓用戶指定地址的交互。

先把提取圖片的那段代碼打包下:

1 defget_image(html_code):2 reg = r'src="(.+?\.jpg)" width'

3 reg_img =re.compile(reg)4 img_list =reg_img.findall(html_code)5 x =06 for img inimg_list:7 urllib.urlretrieve(img, '%s.jpg' %x)8 x += 1

最后來個請輸入:

1 print u'請輸入url:',2 url =raw_input()3 ifurl:4 pass

5 else:6 url = 'http://tieba.baidu.com/p/1753935195'

7 html_code =get_html(url)8 get_image(html_code)

運行一下,試試另一個帖子:

1006376-20160811152749527-237551159.png

1006376-20160811152806090-957015599.png

完美~~

四、交互的添加

雖然寫的是一個簡單的小程序,但有強迫癥的我還是給他加上了交互(不然多難受啊:雙擊,屏幕一閃,下載完了。。。)

最后的代碼

1 #coding:utf-8

2 importurllib3 importre4

5 defget_html(url):6 page =urllib.urlopen(url)7 html_code =page.read()8 returnhtml_code9

10 defget_image(html_code):11 reg = r'src="(.+?\.jpg)" width'

12 reg_img =re.compile(reg)13 img_list =reg_img.findall(html_code)14 x =015 for img inimg_list:16 urllib.urlretrieve(img, '%s.jpg' %x)17 x += 1

18

19 print u'-------網頁圖片抓取-------'

20 print u'請輸入url:',21 url =raw_input()22 ifurl:23 pass

24 else:25 print u'---沒有地址輸入正在使用默認地址---'

26 url = 'http://tieba.baidu.com/p/1753935195'

27 print u'----------正在獲取網頁---------'

28 html_code =get_html(url)29 print u'----------正在下載圖片---------'

30 get_image(html_code)31 print u'-----------下載成功-----------'

32 raw_input('Press Enter to exit')

相對來說比較舒服的交互體驗,大功告成~

1006376-20160811153551606-565192323.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394573.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac下,如何把項目托管到Github上(Github Desktop的使用)

在上一篇中,詳細講解了使用X-code和終端配合上傳代碼的方法,這種方法比較傳統,中間會有坑,英文看起來也費勁,不過Github官方提供了一個Mac版的客戶端,如下圖: 附上下載鏈接:傳送門 下…

計算機網絡英文面試題,計算機網絡面試題整理

GET和POST的區別?GET和POST方法沒有實質上區別,只是報文格式不同。GET和POST是HTTP協議中的兩種請求方法。而 HTTP 協議是基于 TCP/IP 的應用層協議,無論 GET 還是 POST,用的都是同一個傳輸層協議,所以在傳輸上&#x…

利用遞歸求某數的階乘——C/C++

#include<stdio.h>int getFactorial(int n) {if(n0)return 1;else return n*getFactorial(n-1); }int main() {int n,res;scanf("%d",&n);res getFactorial(n);printf("%d",res);return 0; } 轉載于:https://www.cnblogs.com/daemon94011/p/106…

intern_充分利用Outreachy Intern申請流程

internby Joannah Nanjekye喬安娜南耶基(Joannah Nanjekye) 充分利用Outreachy Intern申請流程 (Get the most out of your Outreachy Intern application process) Outreachy gives three-month paid internships for persons that are underrepresented in tech. Interns ar…

Put-Me-Down項目Postmortem2

一.設想和目標二.計劃三.資源四.變更管理五.設計/實現六.測試/發布總結一.設想和目標 1. 我們的軟件要解決什么問題&#xff1f;是否定義得很清楚&#xff1f;是否對典型用戶和典型場景有清晰的描述&#xff1f; 我們的軟件要幫助低頭族控制使用手機時間。功能很明確&#xff0…

大數據實驗報告總結體會_建設大數據中臺架構思考與總結

簡介本文介紹完善的大數據中臺架構了解這些架構里每個部分的位置&#xff0c;功能和含義及背后原理及應用場景。幫助技術與產品經理對大數據技術體系有個全面的了解。數據中臺定義&#xff1a;集成離線數倉與實時數倉&#xff0c;并以多數據源統一整合采集到kafka,再通過kafka進…

半數集問題

給定一個自然數n&#xff0c;由n開始可以依次產生半數集set(n)中的數如下&#xff1a; (1) n ∈set(n)&#xff1b; (2) 在n的左邊加上一個自然數&#xff0c;但該自然數不能超過最近添加的數的一半&#xff1b; (3) 按此規則進行處理&#xff0c;直到不能再添加自然數為止。…

微型計算機控制理論基礎答案,微型計算機控制技術試卷c

微型計算機控制技術試卷a潘新民 微型計算機控制技術實用教程微型計算機控制技術試卷C一、選擇題(本題共10小題&#xff0c;每小題 1.5分&#xff0c;共15分)1. DAC0832的VREF接-5V&#xff0c;IOUT1接運算放大器異名端&#xff0c;輸入為1000000B &#xff0c;輸出為( )。A. 5V…

aws lambda_四處奔走:初學者遇到AWS Lambda

aws lambdaby Janaka Bandara通過Janaka Bandara 四處奔走&#xff1a;初學者遇到AWS Lambda (Running around the block: a beginner meets AWS Lambda) Computing! It sure has a very long, vivid (and sometimes awkward) history. Some key milestones include:計算&…

python打開快捷方式_Python創建啟動目錄的快捷方式,python,到

# -*- coding:utf-8 -*-# author&#xff1a;lizonezhiimport osimport sysimport pythoncomimport win32com.client as clientdef createShortCut(filename): # 目前創建的無起始位置"""filename should be abspath, or there will be some strange errors&quo…

二叉樹的基本操作及應用(三)

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> typedef char DataType; int depth0; int h11; int nlayer1; char ch2; typedef struct node {DataType data;//節點數據元素struct node *lchild;//指向左孩子struc…

maven的profile詳解

詳細內容請見&#xff1a;https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能讓你為一個特殊的環境自定義一個特殊的構建&#xff1b;profile使得不同環境間構建的可移植性成為可能。Maven中的profile是一組可選的配置&#xff0c;可以用來設置或者覆蓋配置默認值。有…

夏至未至計算機版音樂,夏至未至有哪些插曲背景音樂 夏至未至所有bgm歌曲匯總...

夏至未至有哪些插曲背景音樂 夏至未至所有bgm歌曲匯總夏至未至第一集插曲是什么?夏至未至插曲曝光。夏至未至是由陳學冬、鄭爽、白敬亭等聯袂主演的青春偶像劇,昨晚已經開播了&#xff0c;那么第一集的插曲是什么呢?和小編一起去看看吧!夏至未至第一集插曲《那些花兒》那片笑…

了解如何在20分鐘內創建您的第一個Angular應用

Angular is a JavaScript framework, created my Misko Hevery and maintained by Google. It’s an MVC (Model View Vontroller). You can visit the official page to learn more about it.Angular是一個JavaScript框架&#xff0c;創建了我的Misko Hevery&#xff0c;并由G…

js閉包使用

閉包就是在一個函數內定義一個內部函數 并返回內部函數 function f1(){var a1; addfunction(){aa1;} function f1Sub(){ console.log(a); } return f1Sub; } var ff1();f();add();f();var f2f1();add();f(); 輸出為 1 2 2 可以看到輸出結果 定義f2后執行add 這時 f2的add函數已…

BIO,NIO,AIO總結(二)

這里重點介紹NIO 待定 http://www.apigo.cn/2018/11/09/javacore5/ https://juejin.im/entry/598da7d16fb9a03c42431ed3 https://mp.weixin.qq.com/s/c9tkrokcDQR375kiwCeV9w?轉載于:https://www.cnblogs.com/smallJunJun/p/10607078.html

思科配置計算機ip地址子網掩碼,計算機系統與網絡技術IP地址 子網掩碼 主機號等計算復習...

IP地址 子網掩碼 主機號等計算復習IP地址、子網掩碼、網絡號、主機號、網絡地址、主機地址復習 IP地址&#xff1a;4段十進制&#xff0c;共32位二進制&#xff0c;如&#xff1a;192.168.1.1 二進制就是&#xff1a;11000000&#xff5c;10101000&#xff5c;00000001&#xf…

nmap常用參數詳解

nmap常用參數詳解 作者&#xff1a;尹正杰 版權聲明&#xff1a;原創作品&#xff0c;謝絕轉載&#xff01;否則將追究法律責任。 借用英雄聯盟的一個英雄趙信的一句話&#xff1a;“即使敵眾我寡,末將亦能萬軍叢中取敵將首級!”。三國關羽&#xff0c;萬軍叢中斬了顏良&#x…

r語言r-shiny_使用Shiny和R構建您的第一個Web應用程序儀表板

r語言r-shinyby AMR通過AMR 使用Shiny和R構建您的第一個Web應用程序儀表板 (Build your first web app dashboard using Shiny and R) One of the beautiful gifts that R has (that Python missed,until dash) is Shiny. Shiny is an R package that makes it easy to build …

RHEL5.8配置開機自動掛載磁盤

Linux環境中可以通過fstab來設置自動掛載磁盤或者共享存儲&#xff0c;操作如下&#xff1a; fstab配置文件路徑&#xff1a;/etc/fstab 每行代表一個存儲位置。 [rootappsrv01 ~]# cat /etc/fstab LABEL/ / ext3 defaults 1…