您好,登錄后才能下訂單哦!
這篇文章給大家介紹Python中怎么實現一個網絡爬蟲,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
第一部分:
獲取網頁信息:
import requests url = "https://voice.baidu.com/act/newpneumonia/newpneumonia" response = requests.get(url)
第二部分:
可以觀察數據的特點: 數據包含在script
標簽里,使用xpath
來獲取數據。 導入一個模塊 from lxml import etree
生成一個html
對象并且進行解析 可以得到一個類型為list
的內容,使用第一項就可以得到全部內容 接下來首先獲取component
的內容,這時使用json
模塊,將字符串類型轉變為字典(Python
的數據結構) 為了獲取國內的數據,需要在component
中找到caseList
接下來上代碼:
from lxml import etree import json # 生成HTML對象 html = etree.HTML(response.text) result = html.xpath('//script[@type="application/json"]/text()') result = result[0] # json.load()方法可以將字符串轉化為python數據類型 result = json.loads(result) result_in = result['component'][0]['caseList']
第三部分:
將國內的數據存儲到excel
表格中: 使用openyxl
模塊,import openpyxl
首先創建一個工作簿,在工作簿下創建一個工作表 接下來給工作表命名和給工作表賦予屬性
代碼如下:
import openpyxl #創建工作簿 wb = openpyxl.Workbook() #創建工作表 ws = wb.active ws.title = "國內疫情" ws.append(['省份', '累計確診', '死亡', '治愈', '現有確診', '累計確診增量', '死亡增量', '治愈增量', '現有確診增量']) ''' area --> 大多為省份 city --> 城市 confirmed --> 累計 crued --> 值域 relativeTime --> confirmedRelative --> 累計的增量 curedRelative --> 值域的增量 curConfirm --> 現有確鎮 curConfirmRelative --> 現有確鎮的增量 ''' for each in result_in: temp_list = [each['area'], each['confirmed'], each['died'], each['crued'], each['curConfirm'], each['confirmedRelative'], each['diedRelative'], each['curedRelative'], each['curConfirmRelative']] for i in range(len(temp_list)): if temp_list[i] == '': temp_list[i] = '0' ws.append(temp_list) wb.save('./data.xlsx')
第四部分:
將國外數據存儲到excel
中: 在component
的globalList
中得到國外的數據 然后創建excel
表格中的sheet
即可,分別表示不同的大洲
代碼如下:
data_out = result['component'][0]['globalList'] for each in data_out: sheet_title = each['area'] # 創建一個新的工作表 ws_out = wb.create_sheet(sheet_title) ws_out.append(['國家', '累計確診', '死亡', '治愈', '現有確診', '累計確診增量']) for country in each['subList']: list_temp = [country['country'], country['confirmed'], country['died'], country['crued'], country['curConfirm'], country['confirmedRelative']] for i in range(len(list_temp)): if list_temp[i] == '': list_temp[i] = '0' ws_out.append(list_temp) wb.save('./data.xlsx')
整體代碼如下:
import requests from lxml import etree import json import openpyxl url = "https://voice.baidu.com/act/newpneumonia/newpneumonia" response = requests.get(url) #print(response.text) # 生成HTML對象 html = etree.HTML(response.text) result = html.xpath('//script[@type="application/json"]/text()') result = result[0] # json.load()方法可以將字符串轉化為python數據類型 result = json.loads(result) #創建工作簿 wb = openpyxl.Workbook() #創建工作表 ws = wb.active ws.title = "國內疫情" ws.append(['省份', '累計確診', '死亡', '治愈', '現有確診', '累計確診增量', '死亡增量', '治愈增量', '現有確診增量']) result_in = result['component'][0]['caseList'] data_out = result['component'][0]['globalList'] ''' area --> 大多為省份 city --> 城市 confirmed --> 累計 crued --> 值域 relativeTime --> confirmedRelative --> 累計的增量 curedRelative --> 值域的增量 curConfirm --> 現有確鎮 curConfirmRelative --> 現有確鎮的增量 ''' for each in result_in: temp_list = [each['area'], each['confirmed'], each['died'], each['crued'], each['curConfirm'], each['confirmedRelative'], each['diedRelative'], each['curedRelative'], each['curConfirmRelative']] for i in range(len(temp_list)): if temp_list[i] == '': temp_list[i] = '0' ws.append(temp_list) # 獲取國外疫情數據 for each in data_out: sheet_title = each['area'] # 創建一個新的工作表 ws_out = wb.create_sheet(sheet_title) ws_out.append(['國家', '累計確診', '死亡', '治愈', '現有確診', '累計確診增量']) for country in each['subList']: list_temp = [country['country'], country['confirmed'], country['died'], country['crued'], country['curConfirm'], country['confirmedRelative']] for i in range(len(list_temp)): if list_temp[i] == '': list_temp[i] = '0' ws_out.append(list_temp) wb.save('./data.xlsx')
結果如下:
國內:
國外:
020 持續更新,精品小圈子每日都有新內容,干貨濃度極高。
結實人脈、討論技術 你想要的這里都有!
搶先入群,跑贏同齡人!(入群無需任何費用)
點擊此處,與Python開發大牛一起交流學習
群號:858157650
Python軟件安裝包,Python實戰教程
資料免費領取,包括 Python基礎學習、進階學習、爬蟲、人工智能、自動化運維、自動化測試等
關于Python中怎么實現一個網絡爬蟲就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。