⑴ 濡備綍鐢╬ython鐖鍙栫綉絝欐暟鎹
鐢╬ython鐖鍙栫綉絝欐暟鎹鏂規硶姝ラゅ備笅錛
1.棣栧厛瑕佹槑紜鎯寵佺埇鍙栫殑鐩鏍囥傚逛簬緗戦〉婧愪俊鎮鐨勭埇鍙栭栧厛瑕佽幏鍙杣rl,鐒跺悗瀹氫綅鐨勭洰鏍囧唴瀹廣
2.鍏堜嬌鐢ㄥ熀紜for寰鐜鐢熸垚鐨剈rl淇℃伅銆
3.鐒跺悗闇瑕佹ā鎷熸祻瑙堝櫒鐨勮鋒眰(浣跨敤request.get(url)),鑾峰彇鐩鏍囩綉欏電殑婧愪唬鐮佷俊鎮(req.text)銆
4.鐩鏍囦俊鎮灝卞湪婧愪唬鐮佷腑,涓轟簡綆鍗曠殑鑾峰彇鐩鏍囦俊鎮闇瑕佺敤Beautifulsoup搴撳規簮浠g爜榪涜岃В鏋愶紝鍥犱負鏄痟tml淇℃伅錛岄噰鐢╤tml.parser鐨勬柟寮忚繘琛岃В鏋愩
5.闅忓悗瑕佸湪婧愮綉欏典腑榪涗竴姝ュ畾浣嶇洰鏍囦俊鎮鍦ㄧ綉欏墊簮浠g爜涓鐨勪綅緗錛氬湪緗戦〉涓璅12閿錛屾煡鐪嬪厓緔犱俊鎮錛屼嬌鐢ㄥ乏涓婅掔殑鎸夐挳榪涗竴姝ユ煡鐪嬬洰鏍囦俊鎮浣嶇疆銆
6.浣跨敤beautifululsoup榪涗竴姝ュ畾浣嶆簮浠g爜淇℃伅銆
7.鏈鍚庝嬌鐢ㄥ驚鐜鍙栧嚭鍗曚釜鍏冪礌淇℃伅銆傞栧厛鍒嗘瀽鍗曚釜淇℃伅鐨勪綅緗錛氬畠鍦╱l鍒楄〃涓嬶紝浣跨敤寰鐜鍙栧嚭鐒跺悗瀹氫綅鍗曚釜鍏冪礌涓淇℃伅鐨勪綅緗錛屽苟鍙栧嚭淇℃伅銆
8.鏈緇堝氨寰楀埌鐩鏍囦俊鎮鍒楄〃浜嗐
⑵ python可以爬取什麼數據
一、爬取我們所需要的一線鏈接
channel_extract.py
這里的一線鏈接也就是我們所說的大類鏈接:
from bs4 import BeautifulSoupimport requests
start_url = 'http://lz.ganji.com/wu/'host_url = 'http://lz.ganji.com/'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 = '''
http://lz.ganji.com/jiaju/
http://lz.ganji.com/rironghuo/
http://lz.ganji.com/shouji/
http://lz.ganji.com/bangong/
http://lz.ganji.com/nongyongpin/
http://lz.ganji.com/jiadian/
http://lz.ganji.com/ershoubijibendiannao/
http://lz.ganji.com/ruanjiantushu/
http://lz.ganji.com/yingyouyunfu/尺毀滲
http://lz.ganji.com/diannao/
http://lz.ganji.com/xianlipin/
http://lz.ganji.com/fushixiaobaxuemao/
http://lz.ganji.com/meironghuazhuang/
http://lz.ganji.com/shuma/
http://lz.ganji.com/laonianyongpin/
http://lz.ganji.com/xuniwupin/
'''
那麼拿我爬取的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.Tab>1
如果我們想要單獨獲取某個屬性,可以這樣,例如我們獲取它的 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:
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: 21222324252627282930
四、我們的主函數怎麼寫?
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()
五、計數程序
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)
⑶ python網路爬蟲可以幹啥
《Python3爬蟲入門到精通課程視頻【附軟體與資料】【34課時】--崔慶才》網路網盤資源免費下載
鏈接:https://pan..com/s/1PM2MA-3Ba03Lcs2N_Xa1Rw
Python3爬蟲入門到精通課程視頻【附軟體與資料】【34課時】--崔慶才|章節5: 分布式篇|章節4: 框架篇|章節3: 實戰篇|章節2: 基礎篇|章節1: 環境配置|Python3爬蟲課程資料代碼.zip|2018-Python3網路爬蟲開發實戰-崔慶才.pdf|課時06:Python爬蟲常用庫的安裝.zip|課時05:Python多版本共存配置.zip|課時04:MySQL的安裝.zip|課時03:Redis環境配置.zip|課時02:MongoDB環境配置.zip|課時01:Python3+Pip環境配置.zip|課時13:Selenium詳解.zip
⑷ 如何用Python爬取數據
方法/步驟
在做爬取數據之前,你需要下載安裝兩個東西,一個是urllib,另外一個是python-docx。
7
這個爬下來的是源代碼,如果還需要篩選的話需要自己去添加各種正則表達式。
⑸ python怎麼爬取數據
在學習python的過程中,學會獲取網站的內容是我們必須要掌握的知識和技能,今天就分享一下爬蟲的基本流程,只有了解了過程,我們再慢慢一步步的去掌握它所包含的知識
Python網路爬蟲大概需要以下幾個步驟:
一、獲取網站的地址
有些網站的網址十分的好獲取,顯而易見,但是有些網址需要我們在瀏覽器中經過分析得出
二、獲取網站的地址
有些網站的網址十分的好獲取,顯而易見,但是有些網址需要我們在瀏覽器中經過分析得出
三、請求 url
主要是為了獲取我們所需求的網址的源碼,便於我們獲取數據
四、獲取響應
獲取響應是十分重要的, 我們只有獲取了響應才可以對網站的內容進行提取,必要的時候我們需要通過登錄網址來獲取cookie 來進行模擬登錄操作
五、獲取源碼中的指定的數據
這就是我們所說的需求的數據內容,一個網址裡面的內容多且雜,我們需要將我們需要的信息獲取到,我目前主要用到的方法有3個分別是re(正則表達式) xpath 和 bs.4
六、處理數據和使數據美化
當我們將數據獲取到了,有些數據會十分的雜亂,有許多必須要的空格和一些標簽等,這時我們要將數據中的不需要的東西給去掉
七、保存
最後一步就是將我們所獲取的數據進行保存,以便我們進行隨時的查閱,一般有文件夾,文本文檔,資料庫,表格等方式