來自乙個學員的反饋 python 網路爬蟲入門

2021-10-24 13:17:31 字數 4516 閱讀 2516

我選擇的**是中國天氣網中的蘇州天氣,準備抓取最近7天的天氣以及最高/最低氣溫 

程式開頭我們新增:

# coding : utf-8
這樣就能告訴直譯器該py程式是utf-8編碼的,源程式中可以有中文。

要引用的包:

requests:用來抓取網頁的html源** 

csv:將資料寫入到csv檔案中 

random:取隨機數 

time:時間相關操作 

socket和http.client 在這裡只用於異常處理 

beautifulsoup:用來代替正則式取原始碼中相應標籤中的內容 

urllib.request:另一種抓取網頁的html源**的方法,但是沒requests方便(我一開始用的是這一種)

獲取網頁中的html**:

header是requests.get的乙個引數,目的是模擬瀏覽器訪問 

header 可以使用chrome的開發者工具獲得,具體方法如下: 

開啟chrome,按f12,選擇network 

重新訪問該**,找到第乙個網路請求,檢視它的header 

timeout是設定的乙個超時時間,取隨機數是因為防止被**認定為網路爬蟲。 

然後通過requests.get方法獲取網頁的源**、 

rep.encoding = 『utf-8』是將源**的編碼格式改為utf-8(不該源**中中文部分會為亂碼) 

下面是一些異常處理 

返回 rep.text

獲取html中我們所需要的字段:

這裡我們主要要用到beautifulsoup 

beautifulsoup 文件

首先還是用開發者工具檢視網頁原始碼,並找到所需字段的相應位置

找到我們需要欄位都在 id = 「7d」的「div」的ul中。日期在每個li中h1 中,天氣狀況在每個li的第乙個p標籤內,最高溫度和最低溫度在每個li的span和i標籤中。 

感謝joey_ko指出的錯誤:到了傍晚,當天氣溫會沒有最高溫度,所以要多加乙個判斷。

**如下:

def get_data(html_text):

final =

bs = beautifulsoup(html_text, "html.parser") # 建立beautifulsoup物件

body = bs.body # 獲取body部分

data = body.find('div', ) # 找到id為7d的div

ul = data.find('ul') # 獲取ul部分

li = ul.find_all('li') # 獲取所有的li

for day in li: # 對每個li標籤中的內容進行遍歷

temp =

date = day.find('h1').string # 找到日期

inf = day.find_all('p') # 找到li中的所有p標籤

if inf[1].find('span') is none:

temperature_highest = none # 天氣預報可能沒有當天的最高氣溫(到了傍晚,就是這樣),需要加個判斷語句,來輸出最低氣溫

else:

temperature_highest = inf[1].find('span').string # 找到最高溫

temperature_highest = temperature_highest.replace('℃', '') # 到了晚上**會變,最高溫度後面也有個℃

temperature_lowest = inf[1].find('i').string # 找到最低溫

temperature_lowest = temperature_lowest.replace('℃', '') # 最低溫度後面有個℃,去掉這個符號

return final

寫入檔案csv:將資料抓取出來後我們要將他們寫入檔案,具體**如下:

def write_data(data, name):

file_name = name

with open(file_name, 'a', errors='ignore', newline='') as f:

f_csv = csv.writer(f)

f_csv.writerows(data)

主函式:

if __name__ == '__main__':

url =''

html = get_content(url)

result = get_data(html)

write_data(result, 'weather.csv')

然後執行一下: 

生成的weather.csv檔案如下: 

總結一下,從網頁上抓取內容大致分3步: 

1、模擬瀏覽器訪問,獲取html源**

2、通過正則匹配,獲取指定標籤中的內容

3、將獲取到的內容寫到檔案中

【看老師主頁簡介,一起學習吧!】

來自乙個react SPA的總結 redux篇

本文是自己這幾天做乙個reactspa的其中之一篇總結,主要總結在實踐中,學習到的有關redux的一些思想 並沒有太多細節 方便日後自己的重溫 redux用作管理應用的data state和ui state,在react中元件間的通訊一般是parent child間,兄弟間鑑於我初出茅廬,暫時沒遇到...

來自乙個前端新手的感悟

初入社會,我只是乙個前端路上飛行的菜鳥,經過一段時間的工作之後,才知道,我踩了無數的坑。希望,看過我寫的文章的同胞們,不要再和我犯同樣的錯誤。純屬個人思考 1.當負責專案中乙個模組的開發時,不要忘記,它只是專案中的乙個模組。當我拿到專案經理安排好的工作計畫書時,開始對自己負責的部分的需求進行熟悉,這...

乙個閉環負反饋的設計經驗

乙個閉環負反饋的設計經驗 在上游指令更新快,而下游調節慢,反饋有延時的情況下,指令每一次更新並下發前,都要等待接收到上次指令下發後最新的反饋,確保負反饋是可靠的,因此指令的更新頻次必須比下游調節速度更慢。否則會出現指令的過調。例如 同期函式中,頻率調節的給定更新 下發頻次要慢於反饋更新延時。例如 軟...