基于bs4+requests的安居客爬虫

news/2024/7/19 11:56:40 标签: 爬虫, python

1.代码可以直接运行,请下载anaconda并安装,用spyder方便查看变量
或者可以查看生成的excel文件
2.依赖库,命令行运行(WIN10打开命令行快捷键:windows+x组合键,然后按a键):
pip install BeautifulSoup4
pip install requests
3.爬取的网站是安居客(厦门)网站,可以进入https://xm.fang.anjuke.com/loupan/all/进行观察
4.关于如何判断代码是python2还是python3,print('')为python3,print ''为python2

# -*- coding: utf-8 -*-
"""
Created on Sun Jan 14 19:07:39 2018

@author: Steven Lei
"""

def getHousesDetails(url):
  import requests
  from bs4 import BeautifulSoup
  
  request = requests.get(url)
  request.encoding = 'utf-8'
  soup = BeautifulSoup(request.text,'lxml')
  houses = soup.select('.item-mod')[3:]
  housesDetails = []
  for house in houses:
    #获取楼盘名字
    houseName = house.select('.items-name')[0].text
    #获取楼盘价格
    priceBefore = house.select('.price')
    if(len(priceBefore) == 0):
        priceBefore = house.select('.price-txt')
    price = priceBefore[0].text
    #获取楼盘地址
    address = house.select('.list-map')[0].text
    if(address[-1] == '.'):
      href = house.select('.pic')[0]['href']
      request = requests.get(href)
      request.encoding = 'utf-8'
      soup = BeautifulSoup(request.text,'lxml')
      address = soup.select('.lpAddr-text')[0].text
    #获取房屋面积
    houseSizeBefore = house.select('.huxing span')
    if(len(houseSizeBefore) >0):
      houseSize = houseSizeBefore[-1].text
    else:
      houseSize = ''
    #获取销售状态
    saleStatus = house.select('.tag-panel i')[0].text
    #获取户型
    if(len(house.select('.tag-panel i')) == 2):
      houseType = house.select('.tag-panel i')[1].text
    else:
      houseType = house.select('.tag-panel span')[0].text
    #将获取的信息做成房屋信息字典
    houseDetail = {}
    houseDetail['houseName'] = houseName
    houseDetail['price'] = price
    houseDetail['address'] = address
    houseDetail['houseSize'] = houseSize
    houseDetail['saleStatus'] = saleStatus
    houseDetail['houseType'] = houseType
    print(houseDetail)
    housesDetails.append(houseDetail)
  return housesDetails

def getAllHouseDetails():
  import pandas
  urlBefore = 'https://xm.fang.anjuke.com/loupan/all/p{}/'
  allHouseDetails = []
  for i in range(1,8):
    url = urlBefore.format(i)
    allHouseDetails.extend(getHousesDetails(url))
  dataframe = pandas.DataFrame(allHouseDetails)
  return dataframe

if __name__ == '__main__':
  #houseDetails = getHousesDetails('https://xm.fang.anjuke.com/loupan/all/p1/')
  allHouseDetails = getAllHouseDetails()
  allHouseDetails.to_excel('anjukeHousesDetails.xlsx')
  print(allHouseDetails.head(10))

http://www.niftyadmin.cn/n/1271089.html

相关文章

HTML LIST 输入框自动查询追加框,自动过滤 HTML5

1 <!DOCTYPE HTML>2 <html>3 <body>4 5 <form action"/example/html5/demo_form.asp">6 网页&#xff1a;<input type"url" list"url_list" name"link" />7 <datalist id"url_list">8 …

机器学习02

1&#xff0c;回归算法-线性回归分析 线性回归详解 2&#xff0c;线性回归实例 # coding: gbk from sklearn.datasets import fetch_california_housing from sklearn.linear_model import LinearRegression,SGDRegressor from sklearn.model_selection import train_test_spl…

debian 编译 php mysql_Debian 9 下编译安装PHP及配置

一、准备工作1.1 更新系统安装包列表没啥&#xff0c;就他喵想用个最新的。# apt update1.2 必须软件包下面都是编译php必须的&#xff0c;提前安装好。# apt install gcc make# apt install libxml2 libxml2-dev //xml库1.2 创建需要使用的目录创建目录source和web&#xf…

leetcode 171. Excel Sheet Column Number

给定字符串&#xff0c;A-Z代表1~26&#xff0c;转化为数字&#xff0c;AA表示27。 int titleToNumber(string s) {int ret 0;int size s.size();for (int i 0; i < size; i) {ret * 26;ret s[i] - A 1;}return ret;} 转载于:https://www.cnblogs.com/willaty/p/837971…

深度学习01

1&#xff0c;深度学习介绍 深度学习&#xff08;deep learning&#xff09;是机器学习的分支&#xff0c;是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法&#xff0c;至今已…

mysql 安全权限_MySQL-用户、权限与安全

1.用户管理1.1 创建用户创建用户需要具有CREATE USER权限。命令&#xff1a;CREATE USER 用户名 IDENTIFIED BY 密码;例如&#xff1a;CREATE USER ben IDENTIFIED BY qwe123QWE!#;MySQL使用用户名主机名来标识一个用户&#xff0c;不指定host的情况下默认为%(所有主机都可以访…

java string 长度不够用什么字段接受_不知道Java类文件结构的同学,看这篇文章就够了...

一、前言代码编译的结果从本地机器码转变为字节码&#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步。经过多年的发展&#xff0c;目前的计算机仍然只能识别0和1&#xff0c;但是由于近10年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现…

r语言 mysql 乱码_R语言读写中文编码方式

最近遇到一个很头疼的事&#xff0c;就是 R语言读写中文编码方式。在网上找到了一篇博文&#xff0c;谢谢博主的精彩分享&#xff0c;让我很快解决了问题&#xff0c;在此也分享一下R语言读写数据的方法很多&#xff0c;这里主要是我在使用read.csv/read.table和write.csv/writ…