日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链家网页爬虫_爬虫实战1-----链家二手房信息爬取

發(fā)布時間:2023/12/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链家网页爬虫_爬虫实战1-----链家二手房信息爬取 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

經(jīng)過一段機(jī)器學(xué)習(xí)之后,發(fā)現(xiàn)實在是太枯燥了,為了增添一些趣味性以及熟練爬蟲,在之后會不定時的爬取一些網(wǎng)站

旨在熟悉網(wǎng)頁結(jié)構(gòu)--尤其是HTML的元素,ajax存儲,json;熟練使用pyspider,scrapy兩大框架;掌握基本的requests庫,re正則匹配,urllib庫,Beautifulsoup,css,pyquery 選擇器的使用,pandas庫的輔助;mongodb,csv,xlsx的存儲,redis分布式爬蟲;簡單的反爬技巧

本篇作為實戰(zhàn)的第一篇,爬取了鏈家二手房的信息,一些思路借鑒了網(wǎng)上的框架結(jié)構(gòu),并非純粹原創(chuàng),特此聲明,站在巨人的肩膀上眺望

該篇我自己實踐學(xué)習(xí)到的、需要注意的內(nèi)容如下

本項目實例的知識點有

1. format 和 迭代yield 的使用

2. 三大解析工具的使用 XPath, beautifulsoup,pquery

3.關(guān)于變簽選取,beautifulsoup 的select 方法返回的是列表,需要格外注意, 且用select 來選擇class 標(biāo)簽的時候,只取 空格前邊,class 等號后邊的,比如62行

4.如何將字典信息轉(zhuǎn)化為pd.DataFrame

比如,dict={'a':'1','b':'2','c':'3'}

直接使用data=pd.DataFrame(dict)則會報錯:ValueError: If using all scalar values, you must pass an index

如何解決呢?比較好的方法介紹兩種

第一種為:data=pd.DataFrame(dict,index=[0])

第二種為:pd.DataFrame(list(idct.items()) 代碼位置117行

5.當(dāng)有多個列表同時需要轉(zhuǎn)化為dataframe 的時候,可以將所有的字典全部的存放到一個列表當(dāng)中,隨后直接用pd.dataframe

所對應(yīng)的代碼和注釋如下:

class lianjiaspider(object):

def __init__(self):

self.home_url='http://bj.lianjia.com/'#鏈家首頁的鏈接

self.auth_url='https://passport.lianjia.com/cas/login?service=http%3A%2F%2Fbj.lianjia.com%2F'#用戶的登陸界面,登陸后為鏈家首頁的界面

self.zaishou_url='https://su.lianjia.com/ershoufang/pg{}/'

self.headers=headers = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Cache-Control': 'max-age=0',

'Connection': 'keep-alive',

'Content-Type': 'application/x-www-form-urlencoded',

'Host': 'su.lianjia.com',

'Referer': 'https://su.lianjia.com/chengjiao/',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36',

'Upgrade-Insecure-Requests': '1',

'X-Requested-With': 'XMLHttpRequest',

}

def main_url(self,page):#生成在售房屋每一頁的URL

#r=requests.get(self.home_url)

#return r.text

for next_page in range(1,int(page)):

yield self.zaishou_url.format(next_page)#,可以用于迭代

def detail_sall_url(self):

user_num = input('請輸入你想要的主頁的頁數(shù):')

detail_url_list = []

for i in self.main_url(str(int(user_num)+1)):

try:

response=requests.get(i,headers=self.headers)

if response.status_code==200:#一定不能加引號啊,不然怎么都匹配不到的

html=response.text

soup=bp(html,'lxml')

detail_a_label=soup.select('.clear .noresultRecommend')#返回的是一個列表

for each_a_label in detail_a_label:

detail_url_list.append(each_a_label['href'])#獲得標(biāo)簽,然后獲取屬性href ,并依次取出詳情頁的標(biāo)簽把他放在一個列表當(dāng)中

except requests.ConnectionError as e:

print ('error:', e.args)

return detail_url_list

def parse_detail_url(self,detail_url_list):#用于解析詳情頁

info_concat=[]

for each_detail_url in detail_url_list:

response_detail=requests.get(each_detail_url)

if response_detail.status_code==200:

html_detail_url=response_detail.text

info={}#存為字典/json 形式

soup=bp(html_detail_url,'lxml')

info1=soup.select('.title .main')#獲取含有標(biāo)題的標(biāo)簽的列表

for j in info1:

info['出售房屋標(biāo)題']=j.get_text()#獲取標(biāo)題

info2=soup.select('.price .total')#獲取房屋價格

for p in info2:

info['總價']=p.string + '萬'

info3 = soup.select('.unitPriceValue') # 獲取房屋每平方均價

for unit_price in info3:

info['平方售價'] = unit_price.get_text()

info4 = soup.select('.room') # 獲取廳室

for property in info4:

info['房屋屬性'] = property.get_text()

info5 = soup.select('.area')

for areas in info5:

info['面積'] = areas.get_text()

info6 = soup.select('.type')

for areas in info6:

info['朝向'] = areas.get_text()

info_concat.append(info)

else:

print ('error:', requests.ConnectionError)

return info_concat

def save_to_xlsx(self,detail_url_list): #用于將數(shù)據(jù)存儲到 excel 當(dāng)中

pd.DataFrame(self.parse_detail_url(detail_url_list)).to_excel('鏈家二手房.xlsx', sheet_name='鏈家二手房信息')

def main():

lianjia=lianjiaspider()#實例化

detail_url_list=lianjia.detail_sall_url()

lianjia.save_to_xlsx(detail_url_list)

if __name__=='__main__':

main()

代碼選取5頁的內(nèi)容爬取并存儲結(jié)果如下

總結(jié)

以上是生活随笔為你收集整理的链家网页爬虫_爬虫实战1-----链家二手房信息爬取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。