当前位置:   article > 正文

用Python网络爬虫来教你进行二手房价格及信息爬取(文末送书)

python爬虫爬取房价

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

举世皆浊我独清,众人皆醉我独醒。

有一天,哥们群里聊到买房问题,因为都上班没几年,荷包还不够重。

然后我就想可以参考某家数据研究研究,房价什么情况了。

爬取准备

某家网站里有新房、二手房、租房等待。如果买房,尤其是在北京的首套,可能二手房是选择之一,那我就针对二手房研究一下。

虽然网上有很多数据源或者教程,但我还是打算重新抓一遍,一是保持数据是最新的,而是练手不犯懒。

需要技能:BeautifulSoup解析数据--正则表达式提取数据--csv存储数据

爬虫思路:常规网站爬虫思路

上图是某家二手房展示页面其中一套房的信息,我需要提取它的:位置、几室几厅、平米数、朝向、装修风格、层数、建造年份、建筑形式、售价。

然后通过HTML分析,找到他们对应的字段(这块爬虫教学里很多,不赘述)

  1. from bs4 import BeautifulSoup
  2. import re
  3. import csv
  4. import requests
  5. import pandas as pd
  6. from random import choice
  7. import time

因为链家二手房一共100页,所以很明确的新建一个csv文档,把它名字取好,把列设置好。

  1. columns = ['小区''地区''厅','平米数','方向','状态','层','build-year','形式','钱','单位','网址','推荐语']
  2. # 如果文件由第一行,就不用了
  3. with open('链家二手房100页.csv''w', newline='', encoding='utf-8') as file:
  4.     writer = csv.writer(file, delimiter=',')
  5.     writer.writerow(columns)
  6.     file.close()

数据爬取

1. 100页那就写一个循环进行取数

2. 用BeautifulSoup进行页面数据解析

3. 通过正则表达式提取对应字段位置

4. 把提取的信息写入刚刚说的csv文件

5. 为了方便知道进度,在每页结尾加上打印,知道进度

6. 为了防止"给链家服务器带来压力“选择每页隔几秒再切换下页

7. 所有爬完了,打印一个fin~(这是我个人习惯)

  1. i=1
  2. for j in range(100):
  3.     urll = base_url1+ str(i) +base_url2
  4.     print(urll)
  5.     i += 1
  6.     get_page=requests.get(urll)
  7.     bs_page = BeautifulSoup(get_page.text, 'html.parser')
  8.     list_house = bs_page.findAll('div', class_='info clear')
  9.     for house_one in list_house:
  10.         house_info    = house_one.find_all('div', class_='houseInfo')
  11.         position_info = house_one.find_all('div', class_='positionInfo')
  12.         totalPrice    = house_one.find_all('div', class_='totalPrice')
  13.         href          = house_one.find_all('div', class_='title')
  14.         # 正则提取
  15.         # 小区名,位置
  16.         position_str  =re.findall('_blank">(.+)</a.+_blank">(.+)?</a', str(position_info))
  17.         position_str1 =list(position_str[0])
  18.         # print(type(position_str1),position_str1)
  19.         # 房子信息
  20.         house_info_str=re.findall('span>(.+)?</div>', str(house_info))
  21.         house_info_str = str(house_info_str)[2:-2].split('|')
  22.         # print(type(house_info_str), house_info_str)
  23.         totalPrice_str=re.findall('<span>(.+)</span>(.+)</div>', str(totalPrice))
  24.         totalPrice_str = list(totalPrice_str[0])
  25.         # print(type(totalPrice_str), totalPrice_str)
  26.         href_str      =re.findall('http.+html', str(href))
  27.         # print(type(href_str), href_str)
  28.         AD_str = re.findall('_blank">(.+)?</a>', str(href))
  29.         # print(type(AD_str), AD_str)
  30.         house_all = position_str1 + house_info_str + totalPrice_str + href_str + AD_str
  31.         print(house_all)
  32.         # writer.writerow()
  33.         with open('链家新房100个.csv''a', newline='', encoding='utf-8') as file:
  34.             writer = csv.writer(file, delimiter=',')
  35.             writer.writerow(house_all)
  36.             file.close()
  37.     print(f'---第{i}页---')
  38.     times = choice([3456])
  39.     print(f'sleep{times}\n')
  40.     time.sleep(times)
  41. print('fin')

数据概况

当上边数据跑完了后,可以看到一个表格,打开后数据情况如下:

可以看到,小区名、地点、房型、平米数、方向、层数、建造年代、楼房形式、售价、对应详情页网址就都有啦~

希望对您带来帮助。

文末有送书活动1:在公众号后台回复“自动化”三个字,将有机会参与到《Python自动化测试实战》书籍的送书活动中来,很多小伙伴转自动化了,这个书应该是比较有帮助的,看大家的手气啦,闲时摸摸鱼吧~

文末有送书活动2:在公众号后台回复“深度学习”四个字,将有机会参与到《TensorFlow深度学习实战大全》书籍的送书活动中来,看大家的手气啦,闲时摸摸鱼吧~

文末有送书活动3:在公众号后台回复“线性代数”四个字,将有机会参与到《机器学习线性代数基础》书籍的送书活动中来,看大家的手气啦,闲时摸摸鱼吧~

记得,一共3条肥鱼噢~~

------------------- End -------------------

往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持

想加入Python学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

/今日留言主题/

你所在城市的房价目前大概多少一平呢?

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号