1. 程式人生 > 其它 >爬取網頁(涉及儲存和作圖)

爬取網頁(涉及儲存和作圖)

(1)爬取網頁 http://www.pythonscraping.com/pages/page3.html。 (2)從上述網頁中獲取禮品的 item title、description、cost 和 image,並儲存在本地。 (3)編寫一個函式 get( item_title ),從儲存在本地的資料中獲取給定 item title 的 禮 品的 description、cost 和 image(圖形檔名) (4)編寫一個函式 drawGift(item_title ),繪出給定 item title 的禮品的圖片,並在圖中給出禮品的 title、 description 和 cost  
 1 import matplotlib.pyplot as plt
 2 import re
 3 import requests
 4 from requests import RequestException
 5 import json
 6 
 7 def get_one_page(url):   #獲取網頁
 8     try:
 9         response=requests.get(url)
10         if response.status_code==200:
11             return response.text
12         return
None 13 except RequestException: 14 return None 15 16 def parse_html(html): #獲取需要的部分 17 pattern=re.compile('<tr.*?<td>(.*?)</td>.*?<td>(.*?)<span.*?</td>.*?<td>(.*?)</td>.*?<td>.*?<img src="(.*?)">.*?</td></tr>',re.S) 18 gifts=re.findall(pattern,html)
19 print(gifts) 20 for gift in gifts: 21 yield { #生成器 22 'itemTitle':gift[0].strip('\n'), 23 'description':gift[1].strip('\n'), 24 'cost':gift[2].strip('\n'), 25 'image':gift[3] 26 } 27 28 def write_to_file(content): #寫入檔案 29 with open('
result.txt','a',encoding='utf-8') as f: #a表示追加 30 f.write(json.dumps(content,ensure_ascii=False)+'\n') 31 32 def download_img(): #下載圖片 33 with open('result.txt','r') as f: 34 lines=f.readlines() 35 for line in lines: 36 url='http://www.pythonscraping.com'+json.loads(line).get("image")[2:] 37 r=requests.get(url) 38 with open(url[-8:],'wb') as f1: 39 f1.write(r.content) 40 41 def get(item_title): #獲取指定圖片的相關資訊 42 with open('result.txt','r') as f: 43 lines=f.readlines() 44 for line in lines: 45 if json.loads(line).get("itemTitle")==item_title: 46 return json.loads(line) 47 48 def drawGift(item_title): #作圖 49 r=get(item_title) 50 img=plt.imread(r.get("image")[-8:]) 51 plt.imshow(img) 52 plt.axis('off') 53 plt.title(r.get("itemTitle")+'\n'+r.get("description")+''+r.get("cost")) 54 plt.show() 55 56 def main(): 57 url='http://www.pythonscraping.com/pages/page3.html' 58 html=get_one_page(url) 59 for gift in parse_html(html): 60 write_to_file(gift) 61 download_img() 62 63 if __name__ == '__main__': 64 item_title="Dead Parrot" 65 main() 66 drawGift(item_title)