關於用python抓取知乎關注的人?

抓followers頁面里的關注的人,一次只能抓到20個,用瀏覽器進入頁面,發現想要獲取更多的關注著就要下拉頁面。查看之後看到頁面有post請求,我想問一下post表單里的params值怎麼獲取呀?


聽上去有點像前兩天爬取回答的點贊用戶列表時遇到的json數據……


你可以先看一下這裡如何入門 Python 爬蟲? - 段曉晨的回答


不過那個不用POST

是這樣的。

_xsrf=f6cf0e800c0d33fdf8c8c4f3d0701f4a
method=next
params={"offset":20,"order_by":"created","hash_id":"fc91ae5ff90c3248f0fd00102d6c0f08"}

_xsrf 是你登陸知乎時伺服器給的,你可以試著用http://urllib2.urlopen.page.info()方法看能不能把登陸成功以後的_xsrf獲取出來

params 裡面,offset是每次的偏移值,20,40,60,這樣每次20遞增。order_by不用管。

hash_id對於每個用戶來講是唯一的,我換了兩個賬號來查看同一個用戶的關注者,發現hash_id不會變。


這樣你就得到了完整的post數據。

需要注意的一點是,post數據時應該發送 k:v, k1:v2... 而這裡的value值不能是一個dict,比如這裡的params就是一個dict。所以在發送時應該將整體數據先使用urllib.urlencode()方法。

大概是這樣。

這樣就是你在抓包時看到的所謂源代碼

自己先做了這麼多…你可以再自己探索一下,大概方嚮應該就是這樣的。


用chrome的開發者工具,Firefox的firebug,或者第三方的fiddler,抓包仔細分析具體的請求過程就好。
尤其是fiddler,前端神器,寫爬蟲必備。


swoec/spider

這是我之前寫的抓取知乎用戶好友的爬蟲,

先獲取好友數,然後一頁一頁抓取,取得好友的名稱和籤名檔。


不知道題主現在問題解決沒,放上之前看到的一個爬蟲,覺得寫的很好,是 @egrcc寫的,我把地址放在這,相信題主這麼聰明,能找到你需要的部分。
egrcc/zhihu-python · GitHub
另,如果 @egrcc 覺得我放在這不太妥當,請評論,我會及時刪除,謝謝您,我的第一個爬蟲就是照著您的程序寫的。


你好,知乎已經改版,以"梁邊妖"主頁為例,可以爬取https://www.zhihu.com/people/liangbianyao/followers?page=1,設置遍歷page=i獲取followers,其中單頁面簡單爬蟲代碼可以這樣:

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""
import urllib
import urllib.request
from bs4 import BeautifulSoup

class spider_zhihu():
def __init__(self):
self.followers_page = "https://www.zhihu.com/people/liangbianyao/followers?page=1"
self.user_agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94"
self.head = {"User-Agent":self.user_agent}

def getopener(self, head):
opener = urllib.request.build_opener()
header = []
for key, value in head.items():
elem = (key, value)
header.append(elem)
opener.addheaders = header
return opener

def request_page(self, page):
opener = self.getopener(self.head)
url = opener.open(page).read().decode("utf-8")
page = BeautifulSoup(url)
followers = page.find_all(attrs="UserLink-link")
followers_list = []
for i in range(1, len(followers), 2):#遍歷獲取用戶信息
followers_list.append([followers[i].attrs["href"], followers[i].string])
return followers_list

if __name__ == "__main__":
t = spider_zhihu()
followers_list = t.request_page(t.followers_page)

抓取的列表結構為[主頁相對鏈接,用戶名]:
[["/people/shi-xin-11-59", "世新"],
["/people/cui-mu-mu-36", "崔木木"],
["/people/gu-pan-sheng-37", "Missy"]]

其他需要的信息,例如頭像、粉絲的粉絲數等同樣可以用BeautifulSoup包提取。


推薦閱讀:

有沒有什麼東西是 Go 可以做但 Python 做不到的?
如何理解 Python 的 Descriptor?
如何優化 Python 爬蟲的速度?
為什麼網路爬蟲好難,涉及到的知識我不會?

TAG:Python | 爬蟲計算機網路 |