這段時間看了唐松老師寫的《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...