python論壇數據爬,python登陸網站爬取數據

本文目錄一覽:

如何使用python爬取知乎數據並做簡單分析

一、使用的技術棧:

爬蟲:python27 +requests+json+bs4+time

分析工具: ELK套件

開發工具:pycharm

數據成果簡單的可視化分析

1.性別分布

0 綠色代表的是男性 ^ . ^

1 代表的是女性

-1 性別不確定

可見知乎的用戶男性頗多。

二、粉絲最多的top30

粉絲最多的前三十名:依次是張佳瑋、李開復、黃繼新等等,去知乎上查這些人,也差不多這個排名,說明爬取的數據具有一定的說服力。

三、寫文章最多的top30

四、爬蟲架構

爬蟲架構圖如下:

說明:

選擇一個活躍的用戶(比如李開復)的url作為入口url.並將已爬取的url存在set中。

抓取內容,並解析該用戶的關注的用戶的列表url,添加這些url到另一個set中,並用已爬取的url作為過濾。

解析該用戶的個人信息,並存取到本地磁碟。

logstash取實時的獲取本地磁碟的用戶數據,並給elsticsearchkibana和elasticsearch配合,將數據轉換成用戶友好的可視化圖形。

五、編碼

爬取一個url:

解析內容:

存本地文件:

代碼說明:

* 需要修改獲取requests請求頭的authorization。

* 需要修改你的文件存儲路徑。

源碼下載:點擊這裡,記得star哦!https : // github . com/forezp/ZhihuSpiderMan六、如何獲取authorization

打開chorme,打開https : // www. zhihu .com/,

登陸,首頁隨便找個用戶,進入他的個人主頁,F12(或滑鼠右鍵,點檢查)七、可改進的地方

可增加線程池,提高爬蟲效率

存儲url的時候我才用的set(),並且採用緩存策略,最多只存2000個url,防止內存不夠,其實可以存在redis中。

存儲爬取後的用戶我說採取的是本地文件的方式,更好的方式應該是存在mongodb中。

對爬取的用戶應該有一個信息的過濾,比如用戶的粉絲數需要大與100或者參與話題數大於10等才存儲。防止抓取了過多的殭屍用戶。

八、關於ELK套件

關於elk的套件安裝就不討論了,具體見官網就行了。網站:https : // www . elastic . co/另外logstash的配置文件如下:

從爬取的用戶數據可分析的地方很多,比如地域、學歷、年齡等等,我就不一一列舉了。另外,我覺得爬蟲是一件非常有意思的事情,在這個內容消費升級的年代,如何在廣闊的互聯網的數據海洋中挖掘有價值的數據,是一件值得思考和需不斷踐行的事情。

python怎麼爬取數據

根據你要抓取頁面的源碼欄位來進行爬取。根據對應的源碼找到你的需求數據,主要用到requests+BeautifulSoup,其中requests用於請求頁面,BeautifulSoup用於解析頁面。

python怎麼爬取網站數據

很簡單,三步,用爬蟲框架scrapy

1. 定義item類

2. 開發spider類

3. 開發pipeline

如果有不會的,可以看一看《瘋狂python講義》

如何用Python爬取數據?

方法/步驟

在做爬取數據之前,你需要下載安裝兩個東西,一個是urllib,另外一個是python-docx。

請點擊輸入圖片描述

然後在python的編輯器中輸入import選項,提供這兩個庫的服務

請點擊輸入圖片描述

urllib主要負責抓取網頁的數據,單純的抓取網頁數據其實很簡單,輸入如圖所示的命令,後面帶鏈接即可。

請點擊輸入圖片描述

抓取下來了,還不算,必須要進行讀取,否則無效。

請點擊輸入圖片描述

5

接下來就是抓碼了,不轉碼是完成不了保存的,將讀取的函數read轉碼。再隨便標記一個比如XA。

請點擊輸入圖片描述

6

最後再輸入三句,第一句的意思是新建一個空白的word文檔。

第二句的意思是在文檔中添加正文段落,將變數XA抓取下來的東西導進去。

第三句的意思是保存文檔docx,名字在括弧裡面。

請點擊輸入圖片描述

7

這個爬下來的是源代碼,如果還需要篩選的話需要自己去添加各種正則表達式。

python可以爬取什麼數據

一、爬取我們所需要的一線鏈接

channel_extract.py

這裡的一線鏈接也就是我們所說的大類鏈接:

from bs4 import BeautifulSoupimport requests

start_url = ”host_url = ”def get_channel_urls(url):

wb_data = requests.get(url)

soup = BeautifulSoup(wb_data.text, ‘lxml’)

links = soup.select(‘.fenlei dt a’) #print(links)

for link in links:

page_url = host_url + link.get(‘href’)

print(page_url)#get_channel_urls(start_url)channel_urls = ”’

”’123456789101112131415161718192021222324252627282930313233343536

那麼拿我爬取的58同城為例就是爬取了二手市場所有品類的鏈接,也就是我說的大類鏈接;

找到這些鏈接的共同特徵,用函數將其輸出,並作為多行文本儲存起來。

二、獲取我們所需要的詳情頁面的鏈接和詳情信息

page_parsing.py

1、說說我們的資料庫:

先看代碼:

#引入庫文件from bs4 import BeautifulSoupimport requestsimport pymongo #python操作MongoDB的庫import reimport time#鏈接和建立資料庫client = pymongo.MongoClient(‘localhost’, 27017)

ceshi = client[‘ceshi’] #建ceshi資料庫ganji_url_list = ceshi[‘ganji_url_list’] #建立表文件ganji_url_info = ceshi[‘ganji_url_info’]123456789101112

2、判斷頁面結構是否和我們想要的頁面結構相匹配,比如有時候會有404頁面;

3、從頁面中提取我們想要的鏈接,也就是每個詳情頁面的鏈接;

這裡我們要說的是一個方法就是:

item_link = link.get(‘href’).split(‘?’)[0]12

這裡的這個link什麼類型的,這個get方法又是什麼鬼?

後來我發現了這個類型是

class ‘bs4.element.Tab1

如果我們想要單獨獲取某個屬性,可以這樣,例如我們獲取它的 class 叫什麼

print soup.p[‘class’]

#[‘title’]12

還可以這樣,利用get方法,傳入屬性的名稱,二者是等價的

print soup.p.get(‘class’)#[‘title’]12

下面我來貼上代碼:

#爬取所有商品的詳情頁面鏈接:def get_type_links(channel, num):

list_view = ‘{0}o{1}/’.format(channel, str(num)) #print(list_view)

wb_data = requests.get(list_view)

soup = BeautifulSoup(wb_data.text, ‘lxml’)

linkOn = soup.select(‘.pageBox’) #判斷是否為我們所需頁面的標誌;

#如果爬下來的select鏈接為這樣:div.pageBox ul li:nth-child(1) a span 這裡的:nth-child(1)要刪掉

#print(linkOn)

if linkOn:

link = soup.select(‘.zz .zz-til a’)

link_2 = soup.select(‘.js-item a’)

link = link + link_2 #print(len(link))

for linkc in link:

linkc = linkc.get(‘href’)

ganji_url_list.insert_one({‘url’: linkc})

print(linkc) else: pass1234567891011121314151617181920

4、爬取詳情頁中我們所需要的信息

我來貼一段代碼:

#爬取趕集網詳情頁鏈接:def get_url_info_ganji(url):

time.sleep(1)

wb_data = requests.get(url)

soup = BeautifulSoup(wb_data.text, ‘lxml’) try:

title = soup.select(‘head title’)[0].text

timec = soup.select(‘.pr-5’)[0].text.strip()

type = soup.select(‘.det-infor li span a’)[0].text

price = soup.select(‘.det-infor li i’)[0].text

place = soup.select(‘.det-infor li a’)[1:]

placeb = [] for placec in place:

placeb.append(placec.text)

tag = soup.select(‘.second-dt-bewrite ul li’)[0].text

tag = ”.join(tag.split()) #print(time.split())

data = { ‘url’ : url, ‘title’ : title, ‘time’ : timec.split(), ‘type’ : type, ‘price’ : price, ‘place’ : placeb, ‘new’ : tag

}

ganji_url_info.insert_one(data) #向資料庫中插入一條數據;

print(data) except IndexError: pass123456789101112131415161718192021222324252627282930

四、我們的主函數怎麼寫?

main.py

看代碼:

#先從別的文件中引入函數和數據:from multiprocessing import Poolfrom page_parsing import get_type_links,get_url_info_ganji,ganji_url_listfrom channel_extract import channel_urls#爬取所有鏈接的函數:def get_all_links_from(channel):

for i in range(1,100):

get_type_links(channel,i)#後執行這個函數用來爬取所有詳情頁的文件:if __name__ == ‘__main__’:# pool = Pool()# # pool = Pool()# pool.map(get_url_info_ganji, [url[‘url’] for url in ganji_url_list.find()])# pool.close()# pool.join()#先執行下面的這個函數,用來爬取所有的鏈接:if __name__ == ‘__main__’:

pool = Pool()

pool = Pool()

pool.map(get_all_links_from,channel_urls.split())

pool.close()

pool.join()1234567891011121314151617181920212223242526

五、計數程序

count.py

用來顯示爬取數據的數目;

import timefrom page_parsing import ganji_url_list,ganji_url_infowhile True: # print(ganji_url_list.find().count())

# time.sleep(5)

print(ganji_url_info.find().count())

time.sleep(5)

原創文章,作者:BBSWK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317454.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BBSWK的頭像BBSWK
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論