python爬取安居客二手房网站数据(实例讲解)


Posted in Javascript onOctober 19, 2017

是小打小闹

python爬取安居客二手房网站数据(实例讲解)

哈哈,现在开始正式进行爬虫书写首先,需要分析一下要爬取的网站的结构:作为一名河南的学生,那就看看郑州的二手房信息吧!python爬取安居客二手房网站数据(实例讲解)

在上面这个页面中,我们可以看到一条条的房源信息,从中我们发现了什么,发现了连郑州的二手房都是这么的贵,作为即将毕业的学生狗惹不起啊惹不起

python爬取安居客二手房网站数据(实例讲解)

还是正文吧!!!由上可以看到网页一条条的房源信息,点击进去后就会发现:

python爬取安居客二手房网站数据(实例讲解)

房源的详细信息。OK!那么我们要干嘛呢,就是把郑州这个地区的二手房房源信息都能拿到手,可以保存到数据库中,用来干嘛呢,作为一个地理人,还是有点用处的,这次就不说了好,正式开始,首先我采用python3.6 中的requests,BeautifulSoup模块来进行爬取页面,首先由requests模块进行请求:

# 网页的请求头
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
}
# url链接
url = 'https://zhengzhou.anjuke.com/sale/'
response = requests.get(url, headers=header)
print(response.text)

执行后就会得到这个网站的html代码了

python爬取安居客二手房网站数据(实例讲解)python爬取安居客二手房网站数据(实例讲解)通过分析可以得到每个房源都在class="list-item"的 li 标签中,那么我们就可以根据BeautifulSoup包进行提取

# 通过BeautifulSoup进行解析出每个房源详细列表并进行打印
soup = BeautifulSoup(response.text, 'html.parser')
result_li = soup.find_all('li', {'class': 'list-item'})
for i in result_li:
  print(i)

通过打印就能进一步减少了code量,好,继续提取

# 通过BeautifulSoup进行解析出每个房源详细列表并进行打印
soup = BeautifulSoup(response.text, 'html.parser')
result_li = soup.find_all('li', {'class': 'list-item'})
# 进行循环遍历其中的房源详细列表
for i in result_li:
  # 由于BeautifulSoup传入的必须为字符串,所以进行转换
  page_url = str(i)
  soup = BeautifulSoup(page_url, 'html.parser')
  # 由于通过class解析的为一个列表,所以只需要第一个参数
  result_href = soup.find_all('a', {'class': 'houseListTitle'})[0]
  print(result_href.attrs['href'])

这样,我们就能看到一个个的url了,是不是很喜欢python爬取安居客二手房网站数据(实例讲解)

好了,按正常的逻辑就要进入页面开始分析详细页面了,但是爬取完后如何进行下一页的爬取呢所以,我们就需要先分析该页面是否有下一页

python爬取安居客二手房网站数据(实例讲解)

同样的方法就可以发现下一页同样是如此的简单,那么咱们就可以还是按原来的配方原来的味道继续

# 进行下一页的爬取
result_next_page = soup.find_all('a', {'class': 'aNxt'})
if len(result_next_page) != 0:
  print(result_next_page[0].attrs['href'])
else:
  print('没有下一页了')

因为当存在下一页的时候,网页中就是一个a标签,如果没有的话,就会成为i标签了,所以这样的就行,因此,我们就能完善一下,将以上这些封装为一个函数

import requests
from bs4 import BeautifulSoup

# 网页的请求头
header = {
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
}

def get_page(url):
  response = requests.get(url, headers=header)

  # 通过BeautifulSoup进行解析出每个房源详细列表并进行打印
  soup = BeautifulSoup(response.text, 'html.parser')
  result_li = soup.find_all('li', {'class': 'list-item'})

  # 进行下一页的爬取
  result_next_page = soup.find_all('a', {'class': 'aNxt'})
  if len(result_next_page) != 0:
    # 函数进行递归
    get_page(result_next_page[0].attrs['href'])
  else:
    print('没有下一页了')

  # 进行循环遍历其中的房源详细列表
  for i in result_li:
    # 由于BeautifulSoup传入的必须为字符串,所以进行转换
    page_url = str(i)
    soup = BeautifulSoup(page_url, 'html.parser')
    # 由于通过class解析的为一个列表,所以只需要第一个参数
    result_href = soup.find_all('a', {'class': 'houseListTitle'})[0]
    # 先不做分析,等一会进行详细页面函数完成后进行调用
    print(result_href.attrs['href'])


if __name__ == '__main__':
  # url链接
  url = 'https://zhengzhou.anjuke.com/sale/'
  # 页面爬取函数调用
  get_page(url)

好了,那么咱们就开始详细页面的爬取了

哎,怎么动不动就要断电了,大学的坑啊,先把结果附上,闲了在补充,

import requests
from bs4 import BeautifulSoup

# 网页的请求头
header = {
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
}

def get_page(url):
  response = requests.get(url, headers=header)

  # 通过BeautifulSoup进行解析出每个房源详细列表并进行打印
  soup_idex = BeautifulSoup(response.text, 'html.parser')
  result_li = soup_idex.find_all('li', {'class': 'list-item'})

  # 进行循环遍历其中的房源详细列表
  for i in result_li:
    # 由于BeautifulSoup传入的必须为字符串,所以进行转换
    page_url = str(i)
    soup = BeautifulSoup(page_url, 'html.parser')
    # 由于通过class解析的为一个列表,所以只需要第一个参数
    result_href = soup.find_all('a', {'class': 'houseListTitle'})[0]
    # 详细页面的函数调用
    get_page_detail(result_href.attrs['href'])


  # 进行下一页的爬取
  result_next_page = soup_idex.find_all('a', {'class': 'aNxt'})
  if len(result_next_page) != 0:
    # 函数进行递归
    get_page(result_next_page[0].attrs['href'])
  else:
    print('没有下一页了')

# 进行字符串中空格,换行,tab键的替换及删除字符串两边的空格删除
def my_strip(s):
  return str(s).replace(" ", "").replace("\n", "").replace("\t", "").strip()
# 由于频繁进行BeautifulSoup的使用,封装一下,很鸡肋
def my_Beautifulsoup(response):
  return BeautifulSoup(str(response), 'html.parser')



# 详细页面的爬取
def get_page_detail(url):
  response = requests.get(url, headers=header)
  if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    # 标题什么的一大堆,哈哈
    result_title = soup.find_all('h3', {'class': 'long-title'})[0]
    result_price = soup.find_all('span', {'class': 'light info-tag'})[0]
    result_house_1 = soup.find_all('div', {'class': 'first-col detail-col'})
    result_house_2 = soup.find_all('div', {'class': 'second-col detail-col'})
    result_house_3 = soup.find_all('div', {'class': 'third-col detail-col'})
    soup_1 = my_Beautifulsoup(result_house_1)
    soup_2 = my_Beautifulsoup(result_house_2)
    soup_3 = my_Beautifulsoup(result_house_3)
    result_house_tar_1 = soup_1.find_all('dd')
    result_house_tar_2 = soup_2.find_all('dd')
    result_house_tar_3 = soup_3.find_all('dd')
    '''
    文博公寓,省实验中学,首付只需70万,大三房,诚心卖,价可谈 270万
    宇泰文博公寓 金水-花园路-文博东路4号 2010年 普通住宅
    3室2厅2卫 140平方米 南北 中层(共32层)
    精装修 19285元/m² 81.00万
    '''
    print(my_strip(result_title.text), my_strip(result_price.text))
    print(my_strip(result_house_tar_1[0].text),
       my_strip(my_Beautifulsoup(result_house_tar_1[1]).find_all('p')[0].text),
       my_strip(result_house_tar_1[2].text), my_strip(result_house_tar_1[3].text))
    print(my_strip(result_house_tar_2[0].text), my_strip(result_house_tar_2[1].text),
       my_strip(result_house_tar_2[2].text), my_strip(result_house_tar_2[3].text))
    print(my_strip(result_house_tar_3[0].text), my_strip(result_house_tar_3[1].text),
       my_strip(result_house_tar_3[2].text))

if __name__ == '__main__':
  # url链接
  url = 'https://zhengzhou.anjuke.com/sale/'
  # 页面爬取函数调用
  get_page(url)

由于自己边写博客,边写的代码,所以get_page函数中进行了一些改变,就是下一页的递归调用需要放在函数后面,以及进行封装了两个函数没有介绍,

而且数据存储到mysql也没有写,所以后期会继续跟进的,thank you!!!

以上这篇python爬取安居客二手房网站数据(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery判断小数点两位和自动删除小数两位后的数字
Mar 19 Javascript
JavaScript实现动态创建CSS样式规则方案
Sep 06 Javascript
Javascript冒泡排序算法详解
Dec 03 Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 Javascript
vue按需引入element Transfer 穿梭框
Sep 30 Javascript
Vue的事件响应式进度条组件实例详解
Feb 04 Javascript
在Vue中使用Compass的方法
Mar 02 Javascript
iview中Select 选择器多选校验方法
Mar 15 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
Oct 26 Javascript
javascript关于“时间”的一次探索
Jul 24 Javascript
node获取客户端ip功能简单示例
Aug 24 Javascript
ckeditor一键排版功能实现方法分析
Feb 06 Javascript
js 两个日期比较相差多少天的实例
Oct 19 #Javascript
Angular弹出模态框的两种方式
Oct 19 #Javascript
vue使用axios跨域请求数据问题详解
Oct 18 #Javascript
JS实现按钮颜色切换效果
Sep 05 #Javascript
JS实现元素上下左右移动效果
Oct 18 #Javascript
JS去掉字符串中所有的逗号
Oct 18 #Javascript
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 #Javascript
You might like
用PHP制作静态网站的模板框架(二)
2006/10/09 PHP
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
python实现html转ubb代码(html2ubb)
2014/07/03 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
如何基于Python创建目录文件夹
2019/12/31 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
学校司机岗位职责
2013/11/14 职场文书
大学自我鉴定范文
2013/12/26 职场文书
重阳节活动总结
2014/08/27 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
七一晚会主持词
2015/06/29 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js