爬取链家房价信息

主要使用以下库:

requests
BeautifulSoup

相关问题

当爬取次数太多的时候,可能会遇到被封的情况或者验证码, 大佬们可以自行解决,这个脚本里面我就不掺和了,毕竟我也没有找到好的解决方案,因为这是自己随便用用的嘛

  1. 更换UA
  2. 使用代理
  3. 使用自动打码的玩意或者自动识别验证码

整个脚本也比较简单, 就是通过拼接相应的url地址,拿到页面相应的内容, 然后通过BeautifulSoup 把相关信息 一个一个找出来,填入到excel中

当然,各位不要频繁爬取数据,否则涉及到爬虫问题就尴尬了

具体脚本如下:

# -*- coding: UTF-8 -*-
import json
import urllib2, urllib
import cookielib
import csv
import codecs
import random, time
import cStringIO
import sys
import re
from bs4 import BeautifulSoup
from PIL import Image
import socket, os
import requests# 杭州各县市区
# 房源地区列表
# areas_rent = {'江干':'jianggan','余杭':'yuhang','西湖':'xihu','萧山':'xiaoshan','滨江':'binjiangb',
#        '拱墅':'gongshu','下城':'xiacheng','上城':'shangcheng','富阳':'fuyang','临安':'linan',
#         '桐庐':'tonglu','淳安':'chunan','建德':'jiande'}
# areas_rent = {'丁桥': 'dingqiao'}
# areas_rent = {'景芳': 'jingfang1'}
# areas_rent = {'未来科技城':'weilaikejicheng'}
areas_rent = {'闲林':'xianlin1'}
global proxy_rantmp_total = {'总价': '无', '单价': '无', '小区名称': '无', '所在区域': '无', '建楼时间': '无'}
# 字段
tmp1 = {'房屋户型': '无', '所在楼层': '无', '建筑面积': '无', '户型结构': '无', '套内面积': '无', '建筑类型': '无','房屋朝向': '无', '建筑结构': '无', '装修情况': '无', '梯户比例': '无', '配备电梯': '无', '产权年限': '无','用水类型': '无', '用电类型': '无'}
tmp2 = {'挂牌时间': '无', '交易权属': '无', '上次交易': '无', '房屋用途': '无', '房屋年限': '无', '产权所属': '无','抵押信息': '无', '房本备件': '无', '房协编码': '无'}def gethtml(url, proxy_ran={}):random_ua = random.randint(1, 4)if random_ua == 1:my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36',}elif random_ua == 2:my_headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',}elif random_ua == 3:my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',}else:my_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko',}reponse = requests.get(url, headers=my_headers, proxies=proxy_ran)reponse.encoding = reponse.apparent_encoding  # 获取文本原来编码,使两者编码一致才能正确显示soup = BeautifulSoup(reponse.text, "lxml")return soupdef gethouseinfo(soup, areas):houseinfos = soup.find_all("li", class_="clear LOGCLICKDATA")# print(houseinfos)for houseinfo in houseinfos:# 得到房源详细页面url# house_tmp = houseinfo.find("a", class_='noresultRecommend img ')tmp = re.compile("noresultRecommend img.?")house_url = houseinfo.find("a", class_=tmp).get('href')  # class 包含这个值print ">>>house_url>>>" + house_urlsoup2 = gethtml(house_url)total_info = soup2.find("div", class_="price")total_price = total_info.find("span", class_="total").string.strip().replace('\n', '')unit_price = total_info.find("span", class_="unitPriceValue").get_text().strip().replace('\n', '')community_info = soup2.find("div", class_="communityName")community_name = community_info.find("a", class_="info").string.strip().replace('\n', '')area_info = soup2.find("div", class_="areaName")area_name = area_info.find("span", class_="info").get_text().strip().replace('\n', '')build_info = soup2.find("div", class_="houseInfo")build_time = build_info.find("div", class_="area").find("div", class_="subInfo").string.strip().replace('\n','')tmp_total['总价'] = total_price.encode('utf-8')tmp_total['单价'] = unit_price.encode('utf-8')tmp_total['小区名称'] = community_name.encode('utf-8')tmp_total['所在区域'] = area_name.encode('utf-8')tmp_total['建楼时间'] = build_time.encode('utf-8')base_info = soup2.find("div", class_="base")tmp_infos = base_info.find_all("li")for tmp_info in tmp_infos:tmp_key = tmp_info.find("span", class_="label").stringkey = tmp_key.strip().replace('\n', '').encode('utf-8')tmp_val = tmp_info.find("span", class_="label").next_sibling.stringval = tmp_val.strip().replace('\n', '').encode('utf-8')tmp1[key] = valtrans_info = soup2.find("div", class_="transaction")tmp_infos = trans_info.find_all("li")for tmp_info in tmp_infos:tmp_key = tmp_info.find("span", class_="label").stringkey = tmp_key.strip().replace('\n', '').encode('utf-8')tmp_val = tmp_info.find("span", class_="label").next_sibling.next_sibling.stringval = tmp_val.strip().replace('\n', '').encode('utf-8')# print(key, val)tmp2[key] = val# 找出来的房屋信息需要编码后,传入csv显示中文datas = [tmp_total['小区名称'], tmp_total['所在区域'], tmp_total['总价'], tmp_total['单价'], tmp1['房屋户型'],tmp1['建筑面积'], tmp1['套内面积'], tmp1['所在楼层'], tmp1['装修情况'], tmp1['产权年限'], tmp_total['建楼时间'],tmp2['交易权属'], tmp2['房屋用途'], tmp2['房屋年限'], tmp2['挂牌时间'], tmp1['房屋朝向'], tmp1['配备电梯'],tmp1['梯户比例']]writer.writerow(datas)time.sleep(1)def insertinfo(areas):# 当程序出错,也保存部分内容# try:for area_k, area_v in areas.iteritems():print ">>>>>>>>>>>>>>查找%s地区信息<<<<<<<<<<<<<<" % area_k# 网址信息# https://hz.lianjia.com/ershoufang/yuhang/pg1l2l3bp150ep210/url = 'https://hz.lianjia.com/ershoufang/' + area_v + '/l1l2l3bp150ep210/'print "++++_____++++" + urlsoup = gethtml(url)get_pages = soup.find('div', class_='page-box house-lst-page-box').get('page-data')total_page = json.loads(get_pages)["totalPage"]print("总页数: %d" % total_page)# for i in range(1, total_page + 1):for i in range(1, total_page + 1):url = 'https://hz.lianjia.com/ershoufang/' + area_v + '/pg%d' % i + 'l1l2l3bp150ep210/'print "++++_____++++>" + urlsoup2 = gethtml(url)gethouseinfo(soup2, areas)print "完成第 %d 页" % itime.sleep(3)# except Exception as e:# print "there are some errors, err:%s" %ecsvfile = open('house_info_%s.csv' % areas_rent.values()[0], 'wb')
csvfile.write(codecs.BOM_UTF8)
writer = csv.writer(csvfile)
writer.writerow(['     小区名称     ', '    所在区域    ', '  总价  ', '  单价  ', '房屋户型', '建筑面积', '套内面积', '所在楼层', '装修情况', '产权年限','   建楼时间   ', '交易权属', '房屋用途', '房屋年限', '  挂牌时间  ', '房屋朝向', '配备电梯', '梯户比例'])
print u"查找房源信息"
insertinfo(areas_rent)
csvfile.close()
print u"数据读取完成。"

简单python脚本 爬取杭州链家二手房 房价信息相关推荐

  1. Python爬虫框架Scrapy入门(三)爬虫实战:爬取长沙链家二手房

    Item Pipeline介绍 Item对象是一个简单的容器,用于收集抓取到的数据,其提供了类似于字典(dictionary-like)的API,并具有用于声明可用字段的简单语法. Scrapy的It ...

  2. 爬取北京链家二手房数据

    利用python爬取了北京链家主页的二手房数据,爬取时间为2020年1月8日.由于链家只显示了100页.每页30条,因此只能爬取3000条数据. 后续将爬取各区的小区名,对每个小区的在售二手房数据进行 ...

  3. 爬取北京链家二手房(requests和selenium)

    从网页源码中可以看出这是静态网页,可以直接从源代码里拿数据,先用requests,在用BeautifulSoup解析,最后通过查找获取数据 import requests from bs4 impor ...

  4. 爬取广州链家二手房并写入csv

    知识点:多线程,读取csv,xpath import json import csv import requests import threading import lxml import lxml. ...

  5. 用Python爬取2020链家杭州二手房数据

    起源于数据挖掘课程设计的需求,参考着17年这位老兄写的代码:https://blog.csdn.net/sinat_36772813/article/details/73497956?utm_medi ...

  6. Python:爬了下链家的小区数据,为数据分析弄素材~

    前言:最近在学数据分析,包括主成分分析.因子分析.聚类...等等,没有数据可不行啊,所以就把链家的小区数据给爬了一下,为后续的分析实战弄素材~ 2019年7月18日修正: 因为高德和百度对于GPS的加 ...

  7. 简单python爬虫爬取游戏wiki立绘

    简单python爬虫爬取游戏wiki立绘 玩二次元手游是感叹美少女立绘真好看啊,可惜就是抽不到,于是看到b站wiki上有角色立绘,就写了个爬虫准备将立绘趴下来欣赏(舔). 本人爬虫的技术只算是初学,代 ...

  8. 爬取‘广州链家新房’数据并以csv形式保存。

    --本次的目标是爬取'广州链家新房'前十页的信息,具体需要爬取的信息为'楼房名字.地址.价格以及是否在售的情况',具体的代码如下. import requests,time import pandas ...

  9. 爬取南京链家租房信息

    爬取南京链家租房信息 代码如下 代码片. import requests from lxml import etree if name == "main": #设置一个通用URL模 ...

最新文章

  1. 视觉SLAM如何基于深度学习闭环检测?
  2. css3动画简介以及动画库animate.css的使用
  3. 脑电分析系列[MNE-Python-16]| 脑电数据的Epoching处理
  4. 防止按钮重复点击 模型转字典 接口传参不能用汉字,要转码
  5. And(CF-1013B)
  6. 关于零拷贝技术,你了解多少?
  7. 量子计算机 程序,量子计算机程序 会早于量子计算机出现
  8. delphi7 获取计算机名,远程控制篇:获得网络邻居所有机器名_delphi教程
  9. 数字信号中的各种频率
  10. 【熟知水星无线路由器的安装步骤】
  11. 新华社痛批铁道部封抢票软件:自己傻就怨别人太聪明
  12. 人人互动直播之Swoole通讯服务重启教程
  13. 【技巧分享】股票代码规则
  14. VIVADO 自定义封装ip核(超详细)
  15. 笔记1-----校园网进知网步骤
  16. Spring Boot入门系列(六)Spring Boot如何使用Mybatis XML 配置版【附详细步骤】
  17. 敬告青年---陈独秀
  18. 求生之路无限子弹服务器,求生之路2怎么调无限子弹(在单机中)
  19. Python爬虫 - wallhaven任意页面下的壁纸批量下载
  20. 盖达尔的旗帜 php,【盖达尔的旗帜】突然的感动!良心定制!蛇皮AF1开箱!

热门文章

  1. Qt 工程添加windows库文件
  2. 每周工作4小时,蒂莫西·费里斯 最理想的工作方式和生活方式,QQ群666243547
  3. 前导问题word使用技巧---解决Word 生成目录时前导符不一致的问题(即通常所谓的目录中省略号大小不一致)...
  4. for循环与while循环
  5. Ubuntu服务器上安装Anaconda环境以及Vim的简单使用
  6. 经典的60句话[转贴]
  7. 关于小程序session_key漏洞问题的解决2022-12-01
  8. cocos2d-x 获取屏幕大小 实际设计大小 分辨率适配问题
  9. Vue3-Vite-TS-AntD项目搭建
  10. oracle命令解锁用户,在命令行下进行Oracle用户解锁的语句