創新專案實訓:資料爬取
import os
import pandas as pd
import requests
# 第一步:獲取所有寶可夢的編號和名字
# 爬蟲最佳化,超時重試
def get_html(url):
i = 0
# 最多重連 5 次
while i <= 5:
try:
# 最大連線等待時間 30 秒,最大響應等待時間 60 秒
resp = requests.get(url,timeout=(30,60))
resp.encoding = 'utf-8'
return resp
except requests.exceptions.RequestException:
i += 1
print(' 超時 {} 次 '.format(i))
# 生成寶可夢列表(按全國圖鑑編號)簡單版頁面後,可以註釋這段程式碼,然後需要對 data.html 進行部分修改 ( 下面會提及 )
#url = ' 寶可夢列表(按全國圖鑑編號) / 簡單版 '
#data = get_html(url)
#f = open('C:/Users/dell/PycharmProjects/pythonProject1/helloworld/HTML/data.html','w',encoding='utf-8')
#data.encoding='utf-8'
#f.write(data.text)
#f.close()
# 讀取 data.html ,獲取完善的編號和名字
import re
f = open('C:/Users/dell/PycharmProjects/pythonProject1/helloworld/HTML/data.html','r',encoding='utf-8')
#data.html 的讀取
data_html = f.read()
f.close()
# 只獲取編號和名字,多餘內容過濾
data_html = data_html.split('<td>#001')[1]
data_html = data_html.split('Enamorus</a>')[0]
data_html = '<td>#001' + data_html + 'Enamorus</a>'
# 編號
ids = re.findall('<td>#(.*?)\n</td>',data_html)
# 名字
names = re.findall('title="(.*?)"',data_html)
# 去掉世代
def func(s):
return not ' 世代 ' in s
names = list(filter(func,names))
# 第二步:爬取各寶可夢的頁面,獲取其屬性、特性等
# 資料寫進列表裡
l = []
# 遍歷 ids, 生成各寶可夢 html, 再各自爬取
for i in range(len(ids)):
# 每隻寶可夢資料寫入字典中
D_data = {}
D_data['id'] = ids[i]
D_data[' 中文名 '] = names[i * 3]
D_data[' 日文名 '] = names[i * 3 + 1]
D_data[' 英文名 '] = names[i * 3 + 2]
print(D_data)
html = ''
# 判斷若存在 ids 號的 html ,開啟讀取
if os.path.exists('C:/Users/dell/PycharmProjects/pythonProject1/helloworld/HTML/{}.html'.format(ids[i])):
f = open('C:/Users/dell/PycharmProjects/pythonProject1/helloworld/HTML/' + ids[i] + '.html', 'r', encoding='utf-8')
html = f.read()
f.close()
# 若不存在,生成 ids 號的 html
else:
url = '' + D_data[' 中文名 ']
resp = get_html(url)
f = open('C:/Users/dell/PycharmProjects/pythonProject1/helloworld/HTML/' + ids[i] + '.html', 'w', encoding='utf-8')
resp.encoding = 'utf-8'
f.write(resp.text)
html = resp.text
f.close()
# 正規表示式,獲取屬性
type = re.findall('title="(.*?) (屬性) ">', html)
print(type)
D_data[' 屬性 1'] = type[0]
D_data[' 屬性 2'] = len(type) > 1 and type[1] or ''
if len(D_data[' 屬性 1']) > 5 or D_data[' 屬性 1'] == '':
D_data[' 屬性 1'] = D_data[' 屬性 2']
if len(D_data[' 屬性 2']) > 5 or D_data[' 屬性 2'] == '':
D_data[' 屬性 2'] = D_data[' 屬性 1']
try:
# 開始無法獲取,列表為空的時候跳過
skill = re.findall('title="(.*?) (特性) ">', html)
print(skill)
D_data[' 特性 1'] = skill[0]
D_data[' 特性 2'] = len(skill) > 1 and skill[1] or ''
if len(D_data[' 特性 2']) > 5 or D_data[' 特性 2'] == '':
D_data[' 特性 2'] = D_data[' 特性 1']
D_data[' 特性 3'] =外匯跟單gendan5.com len(skill) > 2 and skill[2] or ''
if len(D_data[' 特性 3']) > 5 or D_data[' 特性 3'] == '':
D_data[' 特性 3'] = D_data[' 特性 2']
D_data['HP'] = re.findall('title=" HP "> HP </a> : </div><div style="float:right">(.*?)</div>', html)[0]
D_data[' 攻擊 '] = re.findall('title=" 攻擊 "> 攻擊 </a> : </div><div style="float:right">(.*?)</div>', html)[0]
D_data[' 防禦 '] = re.findall('title=" 防禦 "> 防禦 </a> : </div><div style="float:right">(.*?)</div>', html)[0]
D_data[' 特攻 '] = re.findall('title=" 特攻 "> 特攻 </a> : </div><div style="float:right">(.*?)</div>', html)[0]
D_data[' 特防 '] = re.findall('title=" 特防 "> 特防 </a> : </div><div style="float:right">(.*?)</div>', html)[0]
D_data[' 速度 '] = re.findall('title=" 速度 "> 速度 </a> : </div><div style="float:right">(.*?)</div>', html)[0]
except IndexError:
pass
# 第三步:將爬取到的資料寫入 BKM.csv 檔案中
l.append(D_data)
df = pd.DataFrame(l)
df.to_csv('C:/Users/dell/PycharmProjects/pythonProject1/helloworld/HTML/BKM.csv')
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2899477/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 創新實訓(五)
- 創新實訓(六)
- 大資料爬蟲專案實戰教程大資料爬蟲
- scrapy實戰專案(簡單的爬取知乎專案)
- Python爬蟲訓練:爬取酷燃網視訊資料Python爬蟲
- 房產資料爬取、智慧財產權資料爬取、企業工商資料爬取、抖音直播間資料python爬蟲爬取Python爬蟲
- 【持續更新】創新實訓
- 爬蟲實戰——58同城租房資料爬取爬蟲
- 企業資料爬蟲專案爬蟲
- 爬蟲實戰專案-公眾號:AI悅創爬蟲AI
- 【小專案】爬取上海票據交易所資料並寫入資料庫資料庫
- 創新實訓(11)- 完結篇
- 資料分析專案(一)——爬蟲篇爬蟲
- 企業資料爬蟲專案(二)爬蟲
- 爬取高考資料
- python爬蟲簡歷專案怎麼寫_爬蟲專案咋寫,爬取什麼樣的資料可以作為專案寫在簡歷上?...Python爬蟲
- 網路爬蟲——專案實戰(爬取糗事百科所有文章)爬蟲
- Python3 大型網路爬蟲實戰 004 — scrapy 大型靜態商城網站爬蟲專案編寫及資料寫入資料庫實戰 — 實戰:爬取淘寶Python爬蟲網站資料庫
- BeagleBone Black專案實訓手冊(大學霸內部資料)
- 爬蟲新手入門實戰專案(爬取筆趣閣小說並下載)爬蟲
- 結合LangChain實現網頁資料爬取LangChain網頁
- 創新實訓(9)- 大模型的微調大模型
- 創新實訓 (十)CodeGeeX 模型微調模型
- PySpider爬取去哪兒攻略資料專案IDE
- 專案部薪酬管理創新(轉)
- 淺談專案管理創新(轉)專案管理
- API商品資料介面呼叫實戰:爬蟲與資料獲取API爬蟲
- 爬蟲專案實戰(一)爬蟲
- 爬蟲實戰專案集合爬蟲
- 爬蟲實戰專案合集爬蟲
- 爬蟲爬取資料如何繞開限制?爬蟲
- 實戰專案 7&8 : 從 Web API 獲取資料WebAPI
- Puppeteer爬取網頁資料網頁
- 鬥魚彈幕資料爬取
- 同花順資料爬取
- 【爬蟲】專案篇-使用selenium爬取大魚潮汐網爬蟲
- 全棧 - 9 實戰 爬取豆瓣電影資料全棧
- JavaScript爬蟲程式實現自動化爬取tiktok資料教程JavaScript爬蟲