記一次手寫python爬蟲的經歷

2021-08-19 13:24:49 字數 2616 閱讀 5405

前幾日,一位朋友在用python寫爬蟲的時候遇到問題,向我諮詢。然而我python幾乎連門都沒有入,水平就停留在這篇文章的程度上。但是受人所託,並且看起來問題也不難,於是不得已為之,花了大半個晚上才解決。(畢竟我菜)

問題是這樣的,想要獲取這個**的虛擬貨幣型別,**,成交額,漲幅等資料,按理是很簡單的。但是據朋友說,使用beautifulsoup進行分析的時候,發現爬不到這些資料。

我的第一反應就是,這個**頁面怕是用js動態載入的吧,所以html裡沒有具體內容。但是當我打了log看了一下之後,發現的確能夠返回資料。但是用beautifulsoup處理的時候,卻是返回的空。

於是使用python請求網頁資料,並儲存在本地,仔細研究了一下,發現網頁的內容是這樣的:

可以看到,這個**的標籤是沒有對應的的。雖然據說beautifulsoup可以自動修復這類問題,不過我好像沒有找到具體的方法。而使用chrome等瀏覽器開啟這個網頁檢視原始碼,發現標籤被補全了。

看來是瀏覽器自動給沒有成對的標籤補全了;當然也可能是**方面故意這麼寫的,然後用js給補全,但我覺得這沒什麼意義;理應是瀏覽器的功勞。既然這樣,beautifulsoup由於網頁內容的格式問題不能解析,那麼擺在我面前的大概有兩條路,其一是用**把未成對的標籤補齊,其二是直接把網頁內容當成字串來分析。

為了省時間,我選擇了後者。

接下來的事情就很簡單了,小學生都能做的找規律。稍作分析,我發現了每種虛擬幣**項都是以標籤,依次是序號,幣的名稱,流通市值,**,流通數量,成交額(24h),漲幅(24h),**趨勢(7d)。

首先獲取網頁內容:

request = urllib.request.request("")

response = urllib.request.urlopen(request)

content = response.read().decode('utf-8')

然後把包含了所有幣種的**項這部分的html擷取下來:

start_index = content.

find(')

end_index = content.

find('')

content = content[start_index:end_index]

現在,我們的content儲存的就是所有幣種的**項了。接下來,我們建立乙個列表,把每個幣種的起始位置儲存下來。

list_of_coin_table_start_index = 

start_index = content.

find(')

while start_index != -1:

start_index = content.

find(', start_index + 1)

這樣一來,我們就可以對每種虛擬幣進行分析了。例如獲取這個幣的id欄位,因為每個**項都是以,接下來就是id和》,那麼就可以擷取之間的字串,即是這個幣的id了:

for i in range(0, len(list_of_coin_table_start_index)):

start_index = list_of_coin_table_start_index[i]

coin = coin()

coin.id = content[start_index + 7:content.find('>', start_index)]

其他字段同理。最後,我們把分析結果儲存在txt裡(真的不會資料庫):

with

open('result.txt', encoding='utf-8', mode='w') as f:

f.write('id 名稱 ** 漲幅\n')

for c in coins:

line = ''

line += c.id

line += ' ' * (20 - len(c.id))

line += c.coin_name

line += ' ' * (22 - len(c.coin_name))

line += c.price

line += ' ' * (22 - len(c.price))

line += c.change

line += ' ' * (22 - len(c.change))

line += '\n'

f.write(line)

txt結果如下(由於時間關係,只擷取了id,因為其他欄位都是類似的)

算是功德圓滿了吧。

記一次Python爬蟲入門

程式思路 程式步驟 2 分析該網頁的 3 findall查詢出所有的url,儲存到list中 4 遍歷list,儲存到本地 程式原始碼 請求網頁 import time import requests import re import os 請求頭部 headers response request...

記第一次爬蟲

出不來結果的時候,真是著急,期間犯了很多錯誤,這個過程痛苦並快樂著 哈哈哈哈哈,哈哈哈哈哈 import urllib.request import re import os url page urllib.request.urlopen url read page page.decode gbk ...

記第一次爬蟲

在學習爬蟲的過程中,我首先進行的是對豆瓣top250的爬取,步驟可分為如下幾步 第一步 抓包 url 第二步 請求url 第三步 解析,提取出我需要的資訊 第四步 存入檔案 首先我對豆瓣的網頁進行了分析,開啟要抓取的網頁,f12 f5,這樣你就可以看到網頁原始碼了,進入到network,找到要抓取的...