網路爬蟲學習心得1

2021-10-04 20:46:12 字數 3786 閱讀 8241

這段時間看了唐松老師寫的《python網路爬蟲從入門到實踐》,學到許多網路爬蟲方面的知識,也以書裡的實踐專案進行練手。

我的第一篇的網路爬蟲心得,就以書裡第五章的實踐:爬蟲實踐:房屋**資料,參考書裡的內容進行練手。

實踐專案是獲取安居客**上北京二手房的資料。本專案需要獲取前10頁二手**的名稱、**、幾房幾廳、大小、建造年份、聯絡人、位址、標籤。網頁位址為:

這裡我把北京改為了泉州豐澤區。

link =

for i in

range(1

,11):

''+str

(i)+

'/#filtersort'

)

有了這些內容對應的標籤,就可以利用beautifulsoup庫的find來找到對應的內容。

第二步,爬蟲**編寫

首先,匯入requests和beautifulsoup庫

import requests

from bs4 import beautifulsoup

接著,定製請求頭,利用for迴圈生成每個頁面的鏈結

header =

link =

for i in

range(1

,11):

''+str

(i)+

'/#filtersort'

)

定製requests請求頭,利用network找到hearders。

在定製requests請求頭要注意,user-agent後的內容直接從網頁拷貝出來會有乙個空格,需要去掉,不然會出錯。

接下來,爬取**的資料

要爬取10頁的**資料,需要做乙個迴圈

for n in

range(10

):r = requests.get(link[n]

,headers=header,timeout=10)

soup = beautifulsoup(r.text,

'lxml'

)

取每一頁的60個**資料

h_list = soup.find_all(

'li'

,class_=

'list-item'

)for house in h_list:

name = house.find(

'div'

,class_=

'house-title'

).a.text.strip(

) room = house.find(

'div'

,class_=

'details-item'

).span.text.strip(

) area = house.find(

'div'

,class_=

'details-item'

).contents[3]

.text.strip(

) hight = house.find(

'div'

,class_=

'details-item'

).contents[5]

.text.strip(

) price = house.find(

'span'

,class_=

'price-det'

).text.strip(

) pp = house.find(

'span'

,class_=

'unit-price'

).text.strip(

) address = house.find(

'span'

,class_=

'comm-address'

).text.strip(

) output =

'\t'

.join(

[name,room,area,hight,price,pp,address]

)with

open

(r'd:\house.txt'

,'a+'

,encoding=

'utf-8'

)as f:

f.write(output)

這裡要注意的是,檔案寫入是用gbk碼寫入,爬取資料的有些符號會導致出錯,比如空格、平方。需要修改寫檔案用utf-8格式。

最後放上完整的**

import requests

from bs4 import beautifulsoup

header =

link =

for i in

range(1

,11):

''+str

(i)+

'/#filtersort'

)for n in

range(10

):r = requests.get(link[n]

,headers=header,timeout=10)

soup = beautifulsoup(r.text,

'lxml'

)

h_list = soup.find_all(

'li'

,class_=

'list-item'

)for house in h_list:

name = house.find(

'div'

,class_=

'house-title'

).a.text.strip(

) room = house.find(

'div'

,class_=

'details-item'

).span.text.strip(

) area = house.find(

'div'

,class_=

'details-item'

).contents[3]

.text.strip(

) hight = house.find(

'div'

,class_=

'details-item'

).contents[5]

.text.strip(

) price = house.find(

'span'

,class_=

'price-det'

).text.strip(

) pp = house.find(

'span'

,class_=

'unit-price'

).text.strip(

) address = house.find(

'span'

,class_=

'comm-address'

).text.strip(

) output =

'\t'

.join(

[name,room,area,hight,price,pp,address]

)with

open

(r'd:\house.txt'

,'a+'

,encoding=

'utf-8'

)as f:

f.write(output)

通過這個練手實踐,基本上能掌握靜態頁面的爬取。

網路程式設計學習心得

unix struct in addr 32為的位址結構,是網路位元組序 struct sockaddr in s un b struct s un w u long s addr s un in addr,pin addr,far lpin addr union的作用是將大括號裡所有的東西的記憶體...

oracle學習心得 1

oracle 使用心得 剛開始使用oracle,把今天的學習心得小結一下。oracle 預裝之後會有一些預設的帳戶供使用,具有管理員許可權的可用 system manager 接下來熟悉了一下oracle基本命令 1 建表 舉例 sql create table mytable name chara...

jQuery學習心得(1)

經常見到jquery中的這種寫法 function jquery 許多前端工程師都只是照貓畫虎的這樣,卻不清楚為什麼這樣寫。其實這個寫法是函式定義立即呼叫的寫法之一。在js中,function在定義的時候就可以通過在後面加乙個小括號的形式立即進行呼叫。例如 function function fun...