在此關系圖的起點,API服務器充當中介。它接收GET請求,對其進行處理,并根據請求的參數確定適當的響應。

GET請求表示來自客戶端(如網站或應用程序)向API服務器請求特定數據的查詢,在請求之后,圖中顯示了服務器的響應。首先,發出響應代碼,例如200表示成功,404表示未找到。然后,返回響應數據,其中包含客戶端請求的信息。

由此可以看出,API與網頁抓取的主要區別在于它們訪問數據的方式:

回到最開始提到的案例中。

城市信息可以從多個途徑獲取。一種方法是從官方統計等渠道的網站下載CSV文件。但要注意的是,城市信息可能會變動頻繁,但網站更新的頻率無法保障。

另一個方法是使用百科的數據。大量的用戶在定期更新這些信息,所以只需要專注于選擇正確的數據。

接下來,以使用BeautifulSoup進行網絡抓取為案例。目標是什么?提取關鍵細節,例如名稱、緯度、經度和人口數量,兩個充滿活力的城市:AAA和XXX。

此處作者使用的是Jupyter Notebook開發環境,對于交互式編程和數據可視化非常出色。當然,其他工具如Atom、Visual Studio Code或IntelliJ IDEA也有自己的優勢。

分步Python指南:抓取數據實踐

首先,讓我們看一下用于推斷AAA和XXX數據的代碼。在本節中,將介紹構成項目骨干的Python庫。

import requests

我們的第一個工具是 requests 庫。這是互聯網的關鍵——它幫助我們向網站發送HTTP請求。

from bs4 import BeautifulSoup

接下來,我們從 bs4 包中介紹BeautifulSoup。一旦我們有了目標網頁,BeautifulSoup就會解析HTML內容

import pandas as pd

接下來是 pandas,這是數據科學中不可或缺的庫。我們可以將抓取的數據轉換為可讀的表格,非常適合分析和可視化。

Python中另一個常用的模塊是 re 模塊。它是一個用于處理正則表達式的庫。

import reheaders = {'Accept-Language': 'en-US,en;q=0.8'}

第一步是準備Python環境來接收來自web的數據。我們使用 requests 庫來做到這一點,通過將“Accept-Language”設置為英語來確保我們的請求被普遍理解。

接下來,確定城市的URL -AAA。這個URL將成為我們獲取豐富信息的門戶:

url_aaa = "https://en.wikipedia.org/wiki/aaa"
aaa = requests.get(url_aaa, headers=headers)

發送請求后,檢查請求是否成功是至關重要的。狀態碼為200表示連接成功。

aaa.status_code

# Should return 200

現在使用BeautifulSoup解析AAA的網頁,將HTML內容轉換為我們可以使用的格式。

soup_aaa = BeautifulSoup(aaa.content, "html.parser")

當提取特定數據時,就可以獲得我們想要的結果:

下面是如何仔細檢索這些細節的流程:

A_city = soup_aaa.select(".mw-page-title-main")[0].get_text()
A_country = soup_aaa.select('a[href="/wiki/CCC"]')[0].get_text()
A_latitude = soup_aaa.select(".latitude")[0].get_text()
A_longitude = soup_aaa.select(".longitude")[0].get_text()
A_population = soup_aaa.select('td.infobox-data')[10].get_text()

在成功抓取AAA的數據后,我們將注意力轉向XXX,使用相同的技術提取其城市名稱、人口、緯度和經度。

和前面一樣,使用BeautifulSoup解析XXX的百科頁面,收集必要的數據并創建一個DataFrame。

data = {
"City": [FR_city, BR_city],
"Population": [FR_population, BR_population],
"Latitude": [FR_latitude, BR_latitude],
"Longitude": [FR_longitude, BR_longitude],
"Country": [FR_country, BR_country]
}

df = pd.DataFrame(data)

接下來,我們通過微調來優化DataFrame以獲得更好的可讀性和準確性,以確保我們的數據干凈且易于理解。

df['Population'] = pd.to_numeric(df['Population'], errors='coerce')
df['Latitude'] = pd.to_numeric(df['Latitude'], errors='coerce')
df['Longitude'] = pd.to_numeric(df['Longitude'], errors='coerce')
df['City'] = df['City'].astype(str)
# Display the DataFrame
print(df.head)

如果您的目標是在編碼過程中獲得高水平的舒適性和準確性,并且您有興趣將方法改進到完美,那么這里有一段利用函數的Python代碼。這種方法不僅簡化了過程,而且提高了代碼的可讀性和可重用性。

Display the DataFrame

print(german_cities_df)

 if response.status_code == 200:
soup = BeautifulSoup(response.content, "html.parser")
city = soup.title.get_text().split(' - ')[0]
country = soup.select('td.infobox-data a')[0].get_text()
latitude = soup.select('span.latitude')[0].get_text()
longitude = soup.select('span.longitude')[0].get_text()

# Find the population data using provided code
population_element = soup.select_one('th.infobox-header:-soup-contains("Population")')
if population_element:
population = population_element.parent.find_next_sibling().find(string=re.compile(r'd+'))
if population:
population = int(population)
else:
population = None

data = {
'City': [city],
'Country': [country],
'Latitude': [latitude],
'Longitude': [longitude],
'Population': [population],
}

city_df = pd.DataFrame(data)
return city_df

else:
print("Error:", response.status_code)
return None

# List of German cities ( herre you can add more cities)
german_cities = ['Berlin', 'Frankfurt']

# Create an empty DataFrame with specified columns
german_cities_df = pd.DataFrame(columns=['City', 'Country', 'Latitude', 'Longitude', 'Population'])

# Iterate and scrape data for German cities
for city_name in german_cities:
wiki_link = f"https://en.wikipedia.org/wiki/{city_name}"
city_data = scrape_city_data(wiki_link)

# Append the data to the table
if city_data is not None:
german_cities_df = pd.concat([german_cities_df, city_data], ignore_index=True)

# Display the DataFrame
print(german_cities_df)

通過專業的天氣預報API來獲取數據

有了地理位置,接下來看下影響共享單車的另一個方面——天氣。這部分我們采用調用天氣預報API的方式來獲取數據。

下面是我們準備的Python函數。這個簡潔的代碼片段展示了如何以精煉的方式實現強大的功能,無縫地融合了技術性與易用性之間的隔閡。

for city in cities:
city_weather_df = fetch_weather_data(API_key, city)
if not city_weather_df.empty:
weather_df = weather_df.append(city_weather_df, ignore_index=True)

 if response.status_code == 200:
weather_json = response.json()

if "list" in weather_json:
temperature = weather_json["list"][0]["main"]["temp"]
description = weather_json["list"][0]['weather'][0]['description']
feels_like = weather_json["list"][0]["main"].get("feels_like")
wind_speed = weather_json["list"][0]["wind"].get("speed")

return pd . DataFrame ( {
" city " : [ city ] ,
" forecast_time " : [ datetime . now ( ) ] ,
" outlook " : [ description ] ,
" temperature " : [ temperature ] ,
" feels_like " : [ feels_like ] ,
" wind_speed " : [ wind_speed ]
} )
else :
print ( " Unexpected response format :'list'key not found . " )
else :
print ( f " Failed to fetch data for { city } . Status Code : { response . status_code } " )

return pd.DataFrame()

cities = ["Berlin", "Frankfurt"]
API_key = weather_key

# Replace with your actual API key
weather_df = pd.DataFrame()

for city in cities:
city_weather_df = fetch_weather_data(API_key, city)
if not city_weather_df.empty:
weather_df = weather_df.append(city_weather_df, ignore_index=True)

為什么這很重要?

這個DataFrame不僅僅是天氣數據的集合,而是Python在將原始數據轉換為有意義的見解方面的強大功能。作為一個工具,可以幫助城市居民、旅行者或任何人根據實時天氣狀況做出決定。

在這篇博客中,我們涉及了抓取百科數據、從API獲取天氣數據、Python函數以及復雜數據易于理解的技巧。但真正的項目開發中可能會包括對SQL數據庫、AWS RDS和Lambda的深入研究,因此本文希望可以讓讀者明白理論知識和實際應用之間的差距。

聲明:本文內容僅做技術學習交流使用。

參考原文及相關資料:

網頁抓取和 API:放輕松,這就是數據工程生活方式 |由 Ornela Maloku |2023 年 12 月 |AWS 提示 (awstip.com)

BeautifulSoup文檔

Python教程

ScrapingBee博客

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
返回頂部
上一篇
Alvys Public API 完整指南:自動化物流與定制化集成解決方案
下一篇
2024-2032 全球網絡爬蟲API市場趨勢與云原生發展分析
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
在线免费观看日本一区| 色婷婷久久综合| 粉嫩av一区二区三区| 久久亚洲影视婷婷| 国产盗摄视频一区二区三区| 国产色综合久久| 91免费看视频| 五月天网站亚洲| 久久美女艺术照精彩视频福利播放| 精品亚洲免费视频| 中文字幕在线不卡视频| 欧美亚洲高清一区| 日韩电影在线一区| 国产视频一区在线播放| 91丝袜高跟美女视频| 日韩精品亚洲专区| 欧美国产一区二区在线观看| 91麻豆高清视频| 日韩精品午夜视频| 一区在线中文字幕| 精品国精品国产| 91免费版在线| 国产揄拍国内精品对白| 亚洲午夜精品一区二区三区他趣| 精品黑人一区二区三区久久 | 欧美日韩极品在线观看一区| 国内精品伊人久久久久av影院| 最新日韩av在线| 欧美一级午夜免费电影| 91丝袜呻吟高潮美腿白嫩在线观看| 美腿丝袜亚洲一区| 亚洲一区免费在线观看| 国产亚洲欧美日韩日本| 91精品国产综合久久香蕉麻豆| 91精彩视频在线观看| 成人aa视频在线观看| 高清在线观看日韩| 国产激情一区二区三区| 麻豆精品一区二区av白丝在线| 亚洲国产毛片aaaaa无费看| 久久精品亚洲精品国产欧美kt∨| 777奇米四色成人影色区| 欧洲av在线精品| 色婷婷精品大在线视频| 色婷婷综合中文久久一本| av不卡在线观看| 99riav久久精品riav| aa级大片欧美| 91香蕉视频mp4| 色综合久久综合网欧美综合网| 不卡免费追剧大全电视剧网站| 国产精品亚洲第一| 岛国av在线一区| 99re8在线精品视频免费播放| 成人福利视频网站| 91麻豆产精品久久久久久| 欧美主播一区二区三区美女| 欧美日韩亚洲综合在线| 欧美精品久久99久久在免费线| 91国在线观看| 欧美一二三四区在线| 国产婷婷一区二区| 一区二区三区四区av| 日韩综合小视频| 国产成人在线网站| 欧美四级电影网| 久久久久久久久久久久久夜| 国产精品第13页| 日韩成人免费看| 国产91在线看| 欧美精品v日韩精品v韩国精品v| 精品国产免费视频| 亚洲激情网站免费观看| 免费欧美在线视频| 一本一道久久a久久精品综合蜜臀| 日韩一区二区免费电影| 国产精品污www在线观看| 亚洲成av人片www| 成人免费黄色大片| 欧美日韩精品欧美日韩精品一 | 久久久精品欧美丰满| 亚洲人成电影网站色mp4| 免费观看一级欧美片| 成人av在线资源网站| 欧美一卡在线观看| 亚洲风情在线资源站| 91在线porny国产在线看| 久久人人爽人人爽| 奇米色一区二区三区四区| 日本乱人伦一区| ●精品国产综合乱码久久久久| 精品中文字幕一区二区小辣椒| 欧美午夜电影网| 综合激情网...| 国产一区二区三区精品视频| 欧美一区二区三区免费在线看| 亚洲黄色免费网站| 91国产免费看| 亚洲久草在线视频| 99国内精品久久| 亚洲欧美色图小说| 色综合久久久久久久久| 亚洲视频狠狠干| 色妹子一区二区| 亚洲激情图片qvod| 91老司机福利 在线| 亚洲欧美激情在线| 91国产成人在线| 一区二区在线观看视频在线观看| a级精品国产片在线观看| 国产精品久久看| www.欧美日韩| 一区二区三区中文字幕| 欧美性猛片aaaaaaa做受| 亚洲成人免费影院| 91精品国产欧美一区二区| 久久99最新地址| 久久精品水蜜桃av综合天堂| 成人av资源网站| 亚洲一卡二卡三卡四卡五卡| 8x福利精品第一导航| 久久91精品久久久久久秒播| 2023国产精华国产精品| 国产精品一区二区免费不卡 | 狠狠色狠狠色综合系列| 精品国产一区二区三区四区四 | 午夜私人影院久久久久| 欧美日本一道本在线视频| 蜜桃久久精品一区二区| 久久婷婷成人综合色| 色婷婷亚洲综合| 开心九九激情九九欧美日韩精美视频电影| 精品人在线二区三区| 成人免费高清在线观看| 日日骚欧美日韩| 国产精品久久久久久久久免费樱桃 | 亚洲一区二区三区国产| 欧美一区二区成人6969| 国产盗摄女厕一区二区三区| 亚洲成人久久影院| 综合在线观看色| 精品国产91洋老外米糕| 一本大道久久精品懂色aⅴ | 中文字幕一区二区三区在线观看| 欧美日高清视频| 一本色道**综合亚洲精品蜜桃冫| 麻豆精品精品国产自在97香蕉| 国产在线观看免费一区| 亚洲一区二区三区在线看| 国产夜色精品一区二区av| 欧美日韩一区二区三区高清| 不卡av在线网| 国产裸体歌舞团一区二区| 丝袜国产日韩另类美女| 一区二区三区四区激情| 1024精品合集| 国产精品看片你懂得| 久久久久久久网| 日韩欧美高清dvd碟片| 欧美日产国产精品| 911精品产国品一二三产区 | 欧美亚洲日本一区| 成人av在线资源网站| 国产精品一二一区| 狠狠色综合日日| 激情偷乱视频一区二区三区| 免费观看一级欧美片| 麻豆成人91精品二区三区| 视频一区中文字幕| 日韩国产高清影视| 国产精品高潮呻吟| 中文字幕综合网| 一区二区三区资源| 亚洲成人在线观看视频| 日韩专区欧美专区| 精品中文av资源站在线观看| 蜜臀av一级做a爰片久久| 欧美mv日韩mv国产网站| 欧美精品一区视频| 中文一区在线播放| 亚洲乱码国产乱码精品精的特点| 洋洋av久久久久久久一区| 亚洲国产精品久久人人爱蜜臀| 午夜精品视频在线观看| 久久99日本精品| 99麻豆久久久国产精品免费优播| 91亚洲午夜精品久久久久久| 亚洲一级二级三级| 日韩午夜激情视频| 视频一区在线播放| 日本女优在线视频一区二区| 国产麻豆欧美日韩一区| 懂色av一区二区三区免费看| 91在线国内视频| 欧美日本一区二区在线观看| 欧美一区二区播放| 国产精品国产三级国产aⅴ入口 | 久久久久久久综合| 亚洲国产精品久久不卡毛片| 国产中文一区二区三区|