python3.5爬蟲基礎urllib實例

python3.5不一樣於python2.7,在python3.5中,編寫爬蟲小程序,須要安裝模塊urllib下的request和parse類html

小程序1:編寫腳本,用來實現抓取百度貼吧指定頁面java

 1 import urllib.parse     #主要用來解析url
 2 import urllib.request    #主要用於打開和閱讀url
 3 import os,re
 4 import urllib.error      #用於錯誤處理
 5 
 6 print("模擬抓取百度貼吧python和java頁面,並寫入指定路徑文件")
 7 
 8 def tieba_baidu(url,l):
 9     #假裝成瀏覽器
10     header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'}
11     for i in range(len(l)):
12         file_name="G:/test/"+l[i]+".html"
13         print("正在下載"+l[i]+"頁面,並保存爲"+file_name)
14         m=urllib.request.urlopen(url+l[i],headers=header).read()
15         with open(file_name,"wb") as file:
16             file.write(m)
17 
18 if __name__=="__main__":
19     url="http://tieba.baidu.com/f?kw="
20     l_tieba=["python","java","c#"]
21     tieba_baidu(url,l_tieba)

小程序二:爬取指定頁面指定格式的文件(本例子爬取指定頁面的jpg文件)python

 1 print("爬取指定頁面的jp格式的文件")
 2 def baidu_tieba(url,l):
 3     """
 4     根據傳入的地址和關鍵字列表進行圖片抓取
 5     """
 6     for i in range(len(l)):
 7         count=1
 8         file_name="G:/test/"+l[i]+".html"
 9         print("正在下載"+l[i]+"頁面,並保存爲"+file_name)
10         m=urllib.request.urlopen(url+l[i]).read()
11         #建立目錄保存每一個網頁上的圖片
12         dirpath="G:/test/"
13         dirname=l[i]
14         new_path=os.path.join(dirpath,dirname)
15         if not os.path.isdir(new_path):
16             os.makedirs(new_path)
17 
18         page_data=m.decode()
19         page_image=re.compile('<img src=\"(.+?)\"')    #匹配圖片的pattern
20         for image in page_image.findall(page_data):#page_image.findall(page_data)用正則表達式匹配全部的圖片
21             pattern=re.compile(r'http://.*.jpg$')   #匹配jpg格式的文件
22             if pattern.match(image):      #若是匹配,則獲取圖片信息,若不匹配,進行下一個頁面的匹配
23                 try:
24                     image_data=urllib.request.urlopen(image).read()    #獲取圖片信息
25                     image_path=dirpath+dirname+"/"+str(count)+".jpg"   #給圖片命名
26                     count+=1
27                     print(image_path)   #打印圖片路徑
28                     with open(image_path,"wb") as image_file:
29                         image_file.write(image_data)                     #將圖片寫入文件
30                 except urllib.error.URLError as e:
31                     print("Download failed")
32             with open(file_name,"wb") as file:    #將頁面寫入文件
33                 file.write(m)
34 
35 if __name__=="__main__":
36     url="http://tieba.baidu.com/f?kw="
37     l_tieba=["python","java","c#"]
38     baidu_tieba(url,l_tieba)

 注:正則表達式

一、要爬取某個頁面的文件,必須用urllib.request.urlopen打開頁面的鏈接,並用read方法讀取頁面的html內容小程序

二、要爬取某些具體內容,必須分析該頁面對應的html代碼,找到需爬取內容所在位置的標籤,利用正則表達式獲取標籤c#

三、瀏覽器假裝:爲了防止有些網站拒絕爬蟲,咱們須要假裝成瀏覽器來實現頁面的爬取,即須要添加頭部文件來假裝成瀏覽器瀏覽器

header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'}python2.7

四、規範:爬取的內容儘可能寫入到某個文件,若是直接打印在控制檯,影響閱讀效果;網站

五、致謝:上文小例子親測經過,但具體思路借鑑某位大神,可是地址找不到了,沒法分享給你們~url

相關文章
相關標籤/搜索