scrapy實戰專案(簡單的爬取知乎專案)
本專案實現了對知乎使用者資訊的爬取,並沒有用資料庫等,只是簡單地用一些提取了一些欄位然後儲存在了一個csv檔案中,但是同樣可以實現無線爬取,理論上可以實現萬級資料的爬取(當然取決於網速了)
其實想爬取知乎網站是不需要進行登入的,通過一個個人賬號就可以直接進行爬取了。
事先準備:要求不多,其實掌握了基本的scrapy爬蟲編寫的方式就可以了,當然對python的基本語法要有了解,還有就是一定的邏輯處理能力。
好了,我們來開始進行專案的解析:
我們首先從一個 個人賬戶的首頁進行解析資料,比如我們最愛的——輪子哥
兩個箭頭的位置使我們接下來要重點分析的地方,我們要爬取的就是輪子哥的詳細資訊,我們開啟開發者工具,找到頁面的原始碼,找出輪子哥的詳細資訊在原始碼中的位置
我用的fiddler找到請求,在響應中,我發現輪子哥的詳細資訊都在一個data-state的變數中,而且變數明顯是一個json型別的資料("是雙引號),那我們接下來就是提取這個json資料中我們需要的資料
第一步:把json資料提取出來,用正規表示式re提取json資料
x = response.body.decode('utf-8')
# 用utf8解碼響應的資料流
y = re.search('data-state="({.*?})"', x).group(1).replace('"', '"')
# 用re提取json資料,並用雙引號"替換"字元
經過上面一步就是y就是一個標準的json資料了,那接下來在這個資料中找資訊,這麼亂怎麼找?
我們可以用一個json線上解析,將json資料進行格式化,如圖:
這裡只用把json資料放進去就可以自動化在右邊輸出一個json格式的資料。接下來我們就只剩下解析json資料了。這個應該不難吧!
其實程式碼的大部分就是一個解析json’資料的過程,用json.loads方法將json資料轉化為python字典的形式,然後用字典的方法提取我們想要的資訊,明顯幾乎所有的資訊都在users這個鍵裡面。
好了,提取完了輪子哥的基本資訊,這是一個魔伴,我們是要提取所有人的資訊,所以要實現一個迴圈,讓蟲子爬,順著輪子哥的關注的人爬,然後再爬,一直爬!!!
這就是一個邏輯的問題。
我們再來分析一下我們的start_urls,https://www.zhihu.com/people/excited-vczh/activities 這個連結我們改變的只有一個exci-vczh,也就是說每個人的主頁都是這樣組成的,那麼我們怎麼拿到這個東西呢?
好,我們再分析一下那個json資料
可以看到那個urlToken關鍵字所對應的值剛好使我們需要的欄位,那麼沒話說,我們需要去找到其他人的這個urlToken。找誰的呢,我們來找輪子哥關注的人的
我們點選輪子哥關注的人,然後跳轉頁面,然後檢查頁面!
和前面一步一樣,我們在這個頁面的響應內容裡面仍能找到一個data-state變數,也是儲存了一個json的資料,我們提取這個資料,然後再json解析器中解析就能找到他關注的人的urlToken,好了,我們接下來只要用URLToken進行替換就可以了!
邏輯程式碼貼出來:
def parse_fellow(self,response):
x = response.body.decode('utf-8')
y = re.search('data-state="({.*?})"', x).group(1).replace('"', '"')
dict_y = json.loads(y)
users = dict_y.get('entities').get('users')
for user in users.keys():
urlToken = users.get(user).get('urlToken')
url = 'https://www.zhihu.com/people/{}/activities'.format(urlToken)
yield scrapy.Request(url=url,callback=lambda response,name=urlToken: self.parse_urlToken(response,name))
# 當解析函式有多個引數時,我們就可以用這種方式專遞多個引數了!
這樣我們基本上完成了知乎的遞迴爬取資訊,似乎是一個廣度優先的爬取方式
由於我們這次只是簡單的爬取,就不用資料庫了,直接存進一個csv檔案中
scrapy crawl zhuhuspider -o zhuhu_massage.csv
這樣執行起來,我們就可以在檔案中找到爬取的資料了!,貼圖!!!!
我怕去的欄位有:
school_and_major = Field() # 學校和專業
id = Field() # id
favoriteCount = Field()
voteupCount = Field()
headline = Field()
urlToken = Field()
employments = Field()
job_and_company = Field() # 公司和職位
這就是今天的知乎爬蟲專案,可以無限爬取,不過圖書館網速比較慢,所以一個小時只爬取了1500條資料,然後就強行終止程式了!
原始碼就不給了,因為複製了就可以直接執行,可能會給網站造成一定的壓力!
對了,強行加一張圖!!!
相關文章
- Scrapy建立爬蟲專案爬蟲
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- Python學習筆記——爬蟲之Scrapy專案實戰Python筆記爬蟲
- 簡單專案實戰flutter(功能篇)Flutter
- 爬蟲專案實戰(一)爬蟲
- 爬蟲實戰專案集合爬蟲
- 爬蟲實戰專案合集爬蟲
- Python簡單爬蟲專案Python爬蟲
- 簡單專案實戰flutter(佈局篇)Flutter
- scrapy入門教程()部署爬蟲專案爬蟲
- python網路爬蟲--專案實戰--scrapy嵌入selenium,晶片廠級聯評論爬取(6)Python爬蟲晶片
- 爬蟲專案(一)爬蟲+jsoup輕鬆爬知乎爬蟲JS
- 【專案實戰】---SQLServer中case when的簡單用法SQLServer
- Scrapy的專案管道
- 網路爬蟲——專案實戰(爬取糗事百科所有文章)爬蟲
- Python3 大型網路爬蟲實戰 — 給 scrapy 爬蟲專案設定為防反爬Python爬蟲
- scrapy通用專案和爬蟲程式碼模板爬蟲
- Scrapy入門-第一個爬蟲專案爬蟲
- 利用scrapy建立初始Python爬蟲專案Python爬蟲
- 32個Python爬蟲實戰專案,滿足你的專案慌Python爬蟲
- 在scrapy框架下建立爬蟲專案,建立爬蟲檔案,執行爬蟲檔案框架爬蟲
- python爬蟲簡歷專案怎麼寫_爬蟲專案咋寫,爬取什麼樣的資料可以作為專案寫在簡歷上?...Python爬蟲
- 大資料爬蟲專案實戰教程大資料爬蟲
- 大型商城網站爬蟲專案實戰網站爬蟲
- 創新專案實訓:資料爬取
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 爬蟲新手入門實戰專案(爬取筆趣閣小說並下載)爬蟲
- python爬蟲專案(新手教程)之知乎(requests方式)Python爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- Python爬蟲教程-31-建立 Scrapy 爬蟲框架專案Python爬蟲框架
- 【專案學習】Pendle 專案的簡單調研
- 實戰專案之自動簡歷
- Python網路爬蟲實戰小專案Python爬蟲
- Go語言專案實戰:併發爬蟲Go爬蟲
- Python網路爬蟲實戰專案大全!Python爬蟲
- pyspider 實戰專案之爬取去哪兒IDE
- 一個完整的scrapy 專案