python3.5爬蟲基礎urllib實例


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

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

 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文件)

 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)

 注:

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

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

3、瀏覽器偽裝:為了防止有些網站拒絕爬蟲,我們需要偽裝成瀏覽器來實現頁面的爬取,即需要添加頭部文件來偽裝成瀏覽器

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

4、規范:爬取的內容盡量寫入到某個文件,如果直接打印在控制台,影響閱讀效果;

5、致謝:上文小例子親測通過,但具體思路借鑒某位大神,但是地址找不到了,無法分享給大家~

 


免責聲明!

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



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