爬取网页(涉及存储和作图)
作者:互联网
(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)
标签:网页,gift,get,作图,title,爬取,item,html,def 来源: https://www.cnblogs.com/ffxqc/p/16241403.html