在python3中使用urllib.request編寫簡單的網絡爬蟲


Python官方提供了用於編寫網絡爬蟲的包 urllib.request, 我們主要用它進行打開url,讀取url里面的內容,下載里面的圖片。

分以下幾步:

step1:用urllib.request.urlopen打開目標網站

step2:由於urllib.request.urlopen返回的是一個http.client.HTTPResponse object,無法直接讀取里面的內容,所以直接調用該對象的方法read(),獲取到頁面代碼,存到html里

step3:構建正則表達式,從頁面代碼里提取出圖片url地址。

step4:根據圖片url地址,用urllib.request.retrieve下載到本地

容易出錯的地方:

1:python2.x和python3.x中,urlopen具體在哪個包里是不一樣的。如果你要在python2.x上實現,要自行百度正確的包。

2:最容易出錯的地方是正則表達式,容易出現匹配錯誤。我程序里寫的正則表達式,在目前的網址里是正確的,如果是其他網址可能還會出問題,要具體問題具體分析,去debug。

比如如果img_re=re.compile(r'(?<=src=)"\w+?jpg"')的話,會匹配成""http://tieba.........."

 
 
 
下面是具體代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import  urllib.request
import  re
def  getHtml(url):
     #print("正在打開網頁並獲取....")
     page = urllib.request.urlopen(url)
     Html = str (page.read())
     print ( "成功獲取...." )
     return  Html
def  getImg(html):
     img_re = re. compile (r '(?<=src=")\S+?jpg' )
     #img_re=re.compile(r'src="(.*?\.jpg)"')
     print ( "the type of html is :" , type (html))
     img_list = img_re.findall(html)
     print ( "len(img_list)=" , len (img_list))
     print ( "img_list[0]=" ,img_list[ 0 ])
     print ( "正在下載圖片......" )
     for  in  range ( len (img_list)):
         print ( "img_list[%d]=%s"  %  (i,img_list[i]))
         urllib.request.urlretrieve(img_list[i], '%s.jpg'  %  i)
     print ( "完成圖片下載......" )
     print ( "一共抓到了%d張圖片"  %  len (img_list))
if  __name__ = = "__main__" :
     url_baidu = "http://tieba.baidu.com/f?kw=%B0%A2%C9%AD%C4%C9"
     html = getHtml(url_baidu)
     getImg(html)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM