利用Ajax實現資料爬取 爬取微博主頁

2021-09-10 06:07:43 字數 2051 閱讀 9975

有時候我們在利用requests抓取網頁時,得到的結果可能與在瀏覽器中看到的結果不一樣:在瀏覽器中能看到的東西,但是在爬取下來的網頁源**中看不到。這是因為requests獲取的都是最原始的html文件,而瀏覽器中的頁面則是經過js處理資料得到的結果,這些資料的**有很多種,第一種方式是:通過ajax,第二種方式:在html文件中,第三種方式:經過js和特定的演算法實現的。對於第一種情況,原始的介面不會包含某些資料,等原始介面載入完畢後,會在向伺服器請求資料,然後將請求的資料經過js渲染得到介面在顯示給使用者。

那麼重點來了!!!什麼是ajax???------ajax簡介

一張圖來看ajax在瀏覽器與伺服器之間所起的作用:

在知道什麼是ajax之後,那麼我們如何利用ajax來獲取資料呢?

首先在瀏覽器中找到ajax請求:

以微博為例:

找到我們所要的一些資料,就可以利用requests來模擬ajax請求了

具體的**如下

import requests

import json

def gethtml(url):

try:

headers =

params =

response = requests.get(url,headers = headers,params=params)

response.raise_for_status()

return response.text

except: "爬取失敗"

if __name__ == '__main__':

url = ""

page = gethtml(url)

print(page)

說明:

對於params部分引數的說明:

page:控制頁碼

__rnd:據我推測是個隨機數,具體指什麼請大神賜教

其他的引數:這些引數不變,小生愚鈍,也不知道幹嘛

然後再利用json庫的loads方法變成字典型別,這樣便於後續的操作。

if __name__ == '__main__':

url = ""

page = gethtml(url)

d = json.loads(page)

print(d.get("data"))

html = etree.html(d.get("data"))

imgs = html.xpath("//h3[@class = 'list_title_s']/div/text()")

for i in imgs:

print(i.strip())

上面**中的d就是乙個字典,可以取出其中的資料,資料就是下面紅色方框內的資訊

接下來的那幾行**,我大膽採用lxml庫來進行解析,我不知道可不可以用,但我知道利用正規表示式一定可以。

結果我居然成功的提取出來了

我這是第一次利用模擬ajax來爬取**,有錯誤的地方請批評指正!

有興趣的小夥伴可以一起交流哦! 

python利用Ajax分析方法爬取豆瓣劇情片排行

需要的庫 requests urllib.parse下的urlencode json csvtime 通過檢視network中的ajax請求的xhr檔案發現這條ajax請求包含的資訊如下 可以看到,包含了前20條電影的所有資訊 當再次向下滑動時,會出現新的xhr檔案 每個新的xhr檔案內包含了20條...

爬取新浪微博

學到的東西。1 習慣用logger,而不是用print self.logger.debug 開始解析 format response.url 2 習慣用正規表示式 這是在pipeline清理資料時用到的 s 5分鐘前 if re.match d 分鐘前 s minute re.match d s g...

Day1 Ajax資料爬取

一 渲染網頁 document.getelementbyid mydiv innerhtml xmlhttp.responsetext 這裡就是將id是mydiv的節點內部的html 更改為伺服器返回的內容了 6.2 ajax分析方法 1 在微博的頁面中,開啟審查元素中network,重新整理一下頁...