一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

一小時(shí)入門Python爬蟲!Python爬取租房數(shù)據(jù)實(shí)例分享

 只怕想不到 2019-08-02

一、什么叫爬蟲

爬蟲,又名“網(wǎng)絡(luò)爬蟲”,就是能夠自動(dòng)訪問互聯(lián)網(wǎng)并將網(wǎng)站內(nèi)容下載下來的程序。它也是搜索引擎的基礎(chǔ),像百度和GOOGLE都是憑借強(qiáng)大的網(wǎng)絡(luò)爬蟲,來檢索海量的互聯(lián)網(wǎng)信息的然后存儲(chǔ)到云端,為網(wǎng)友提供優(yōu)質(zhì)的搜索服務(wù)的。

二、爬蟲有什么用

你可能會(huì)說,除了做搜索引擎的公司,學(xué)爬蟲有什么用呢?哈哈,總算有人問到點(diǎn)子上了。打個(gè)比方吧:企業(yè)A建了個(gè)用戶論壇,很多用戶在論壇上留言講自己的使用體驗(yàn)等等?,F(xiàn)在A需要了解用戶需求,分析用戶偏好,為下一輪產(chǎn)品迭代更新做準(zhǔn)備。那么數(shù)據(jù)如何獲取,當(dāng)然是需要爬蟲軟件從論壇上獲取咯。所以除了百度、GOOGLE之外,很多企業(yè)都在高薪招聘爬蟲工程師。你到任何招聘網(wǎng)站上搜“爬蟲工程師”看看崗位數(shù)量和薪資范圍就懂爬蟲有多熱門了。

三、爬蟲的原理

發(fā)起請(qǐng)求:通過HTTP協(xié)議向目標(biāo)站點(diǎn)發(fā)送請(qǐng)求(一個(gè)request),然后等待目標(biāo)站點(diǎn)服務(wù)器的響應(yīng)。

獲取響應(yīng)內(nèi)容:如果服務(wù)器能正常響應(yīng),會(huì)得到一個(gè)Response。Response的內(nèi)容便是所要獲取的頁面內(nèi)容,響應(yīng)的內(nèi)容可能有HTML,Json串,二進(jìn)制數(shù)據(jù)(如圖片視頻)等等。

解析內(nèi)容:得到的內(nèi)容可能是HTML,可以用正則表達(dá)式、網(wǎng)頁解析庫進(jìn)行解析;可能是Json,可以直接轉(zhuǎn)為Json對(duì)象解析;可能是二進(jìn)制數(shù)據(jù),可以做保存或者進(jìn)一步的處理。

保存數(shù)據(jù):數(shù)據(jù)解析完成后,將保存下來。既可以存為文本文檔、可以存到數(shù)據(jù)庫中。

四、Python爬蟲實(shí)例

前面介紹了爬蟲的定義、作用、原理等信息,相信有不少小伙伴已經(jīng)開始對(duì)爬蟲感興趣了,準(zhǔn)備躍躍欲試呢。那現(xiàn)在就來上“干貨”,直接貼上一段簡(jiǎn)單Python爬蟲的代碼:

1.前期準(zhǔn)備工作:安裝Python環(huán)境、安裝PYCHARM軟件、安裝MYSQL數(shù)據(jù)庫、新建數(shù)據(jù)庫exam、在exam中建一張用于存放爬蟲結(jié)果的表格house [SQL語句:create table house(price varchar(88),unit varchar(88),area varchar(88));]

2.爬蟲的目標(biāo):爬取某租房網(wǎng)上首頁中所有鏈接里的房源的價(jià)格、單位及面積,然后將爬蟲結(jié)構(gòu)存到數(shù)據(jù)庫中。

3.爬蟲源代碼:如下

import requests #請(qǐng)求 URL 頁面內(nèi)容

from bs4 import BeautifulSoup #獲取頁面元素

import pymysql #鏈接數(shù)據(jù)庫

import time #時(shí)間函數(shù)

import lxml #解析庫(支持 HTML\XML 解析,支持 XPATH 解析)

#get_page 函數(shù)作用:通過 requests 的 get 方法得到 url 鏈接的內(nèi)容,再整合成BeautifulSoup 可以處理的格式

def get_page(url):

response = requests.get(url)

soup = BeautifulSoup(response.text, 'lxml')

return soup

#get_links 函數(shù)的作用:獲取列表頁所有租房鏈接

def get_links(link_url):

soup = get_page(link_url)

links_div = soup.find_all('div',class_='pic-panel')

links=[div.a.get('href') for div in links_div]

return links

#get_house_info 函數(shù)作用是:獲取某一個(gè)租房頁面的信息:價(jià)格、單位、面積等

def get_house_info(house_url):

soup = get_page(house_url)

price =soup.find('span',class_='total').text

unit = soup.find('span',class_='unit').text.strip()

area = 'test' #這里 area 字段我們自定義一個(gè) test 做測(cè)試

info = {

'價(jià)格':price,

'單位':unit,

'面積':area

}

return info

#數(shù)據(jù)庫的配置信息寫到字典

DataBase ={

'host': '127.0.0.1',

'database': 'exam',

'user' : 'root',

'password' : 'root',

'charset' :'utf8mb4'}

#鏈接數(shù)據(jù)庫

def get_db(setting):

return pymysql.connect(**setting)

#向數(shù)據(jù)庫插入爬蟲得到的數(shù)據(jù)

def insert(db,house):

values = ''{}','*2 + ''{}''

sql_values = values.format(house['價(jià)格'],house['單位'],house['面積'])

sql ='''

insert into house(price,unit,area) values({})

'''.format(sql_values)

cursor = db.cursor()

cursor.execute(sql)

db.commit()

#主程序流程:1.連接數(shù)據(jù)庫 2.得到各個(gè)房源信息的 URL 列表 3.FOR 循環(huán)從第一個(gè) URL 開始獲取房源具體信息(價(jià)格等)4.一條一條地插入數(shù)據(jù)庫

db = get_db(DataBase)

links = get_links('https://bj./zufang/')

for link in links:

time.sleep(2)

house = get_house_info(link)

insert(db,house)

首先,“工欲善其事必先利其器”,用 Python 寫爬蟲程序也是一樣的道理,寫爬蟲過程中需要導(dǎo)入各種庫文件,正是這些及其有用的庫文件幫我們完成了爬蟲的大部分工作,我們只需要調(diào)取相關(guān)的借口函數(shù)即可。導(dǎo)入的格式就是 import 庫文件名。這里要注意的是在 PYCHARM 里安裝庫文件,可以通過光標(biāo)放在庫文件名稱上,同時(shí)按ctrl+alt 鍵的方式來安裝,也可以通過命令行(Pip install 庫文件名)的方式安裝,如果安裝失敗或者沒有安裝,那么后續(xù)爬蟲程序肯定會(huì)報(bào)錯(cuò)的。在這段代碼里,程序前五行都是導(dǎo)入相關(guān)的庫文件:requests 用于請(qǐng)求 URL 頁面內(nèi)容;BeautifulSoup 用來解析頁面元素;pymysql 用于連接數(shù)據(jù)庫;time 包含各種時(shí)間函數(shù);lxml 是一個(gè)解析庫,用于解析 HTML、XML 格式的文件,同時(shí)它也支持 XPATH 解析。

其次,我們從代碼最后的主程序開始看整個(gè)爬蟲流程:

通過 get_db 函數(shù)連接數(shù)據(jù)庫。再深入到 get_db 函數(shù)內(nèi)部,可以看到是通過調(diào)用Pymysql 的 connect 函數(shù)來實(shí)現(xiàn)數(shù)據(jù)庫的連接的,這里**seting 是 Python 收集關(guān)鍵字參數(shù)的一種方式,我們把數(shù)據(jù)庫的連接信息寫到一個(gè)字典 DataBase 里了,將字典里的信息傳給 connect 做實(shí)參。

通過 get_links 函數(shù),獲取鏈家網(wǎng)租房首頁的所有房源的鏈接。所有房源的鏈接以列表形式存在 Links 里。get_links 函數(shù)先通過 requests 請(qǐng)求得到鏈家網(wǎng)首頁頁面的內(nèi)容,再通過 BeautifuSoup 的接口來整理內(nèi)容的格式,變成它可以處理的格式。最后通過電泳find_all 函數(shù)找到所有包含圖片的 div 樣式,再通過一個(gè) for 循環(huán)來獲得所有 div 樣式里包含的超鏈接頁簽(a)的內(nèi)容(也就是 href 屬性的內(nèi)容),所有超鏈接都存放在列表links 中。

通過 FOR 循環(huán),來遍歷 links 中的所有鏈接(比如其中一個(gè)鏈接是:https://bj./zufang/101101570737.html)

用和 2)同樣的方法,通過使用 find 函數(shù)進(jìn)行元素定位獲得 3)中鏈接里的價(jià)格、單位、面積信息,將這些信息寫到一個(gè)字典 Info 里面。

調(diào)用 insert 函數(shù)將某一個(gè)鏈接里得到的 Info 信息寫入數(shù)據(jù)庫的 house 表中去。深入到 insert 函數(shù)內(nèi)部,我們可以知道它是通過數(shù)據(jù)庫的游標(biāo)函數(shù) cursor()來執(zhí)行一段 SQL語句然后數(shù)據(jù)庫進(jìn)行 commit 操作來實(shí)現(xiàn)響應(yīng)功能。這里 SQL 語句的寫法比較特殊,用到了 format 函數(shù)來進(jìn)行格式化,這樣做是為了便于函數(shù)的復(fù)用。

最后,運(yùn)行一下爬蟲代碼,可以看到鏈家網(wǎng)的首頁所有房源的信息都寫入到數(shù)據(jù)里了。(注:test 是我手動(dòng)指定的測(cè)試字符串)

后記:其實(shí) Python 爬蟲并不難,熟悉整個(gè)爬蟲流程之后,就是一些細(xì)節(jié)問題需要注意,比如如何獲取頁面元素、如何構(gòu)建 SQL 語句等等。遇到問題不要慌,看 IDE 的提示就可以一個(gè)個(gè)地消滅 BUG,最終得到我們預(yù)期的結(jié)構(gòu)。

內(nèi)容來自騰訊新聞

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品一区二区不卡中文| 国产欧美日韩精品一区二| 国产三级不卡在线观看视频| 国产欧美一区二区三区精品视| 日韩一级一片内射视频4k| 国产二级一级内射视频播放| 欧美精品激情视频一区| 日本和亚洲的香蕉视频| 国产精品白丝一区二区| 日韩一区二区三区在线日| 国产又粗又猛又大爽又黄| 午夜福利92在线观看| 久久精品国产亚洲av久按摩| 日韩性生活视频免费在线观看| 亚洲欧洲一区二区综合精品| 午夜福利精品视频视频| 国产亚洲视频香蕉一区| 亚洲性生活一区二区三区| 大香蕉再在线大香蕉再在线| 制服丝袜美腿美女一区二区| 中国黄色色片色哟哟哟哟哟哟| 在线一区二区免费的视频| 男女午夜福利院在线观看 | 欧美日不卡无在线一区| 婷婷色国产精品视频一区| 日韩免费午夜福利视频| 国产一区麻豆水好多高潮| 国产午夜精品在线免费看| 男女午夜视频在线观看免费| 婷婷开心五月亚洲综合| 亚洲av专区在线观看| 黄色片一区二区在线观看| 亚洲a码一区二区三区| 精品高清美女精品国产区| 殴美女美女大码性淫生活在线播放| 91插插插外国一区二区婷婷| 亚洲超碰成人天堂涩涩| 国产亚洲精品香蕉视频播放| 精品高清美女精品国产区| 免费观看日韩一级黄色大片| 国产精品视频一区二区秋霞|