python 爬取贝壳网小区名称_用Python爬取贝壳网新房和二手房数据

[Python] 纯文本查看 复制代码import random

import requests

from bs4 import BeautifulSoup

import re

import math

from lxml import etree

USER_AGENTS = [

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",

"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",

"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",

"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",

"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",

"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",

]

chinese_city_district_dict = dict()

chinese_area_dict = dict()

def create_headers():

headers = dict()

headers["User-Agent"] = random.choice(USER_AGENTS)

headers["Referer"] = "http://www.ke.com"

return headers

class SecHouse(object):

def __init__(self, district, area, name, price, desc, pic):

self.district = district

self.area = area

self.price = price

self.name = name

self.desc = desc

self.pic = pic

def text(self):

return self.district + "," + \

self.area + "," + \

self.name + "," + \

self.price + "," + \

self.desc + "," + \

self.pic

def get_districts():

url = 'https://sh.ke.com/xiaoqu/'

headers = create_headers()

response = requests.get(url, timeout=10, headers=headers)

html = response.content

root = etree.HTML(html)

elements = root.xpath('///div[3]/div[1]/dl[2]/dd/div/div/a')

en_names = list()

ch_names = list()

for element in elements:

link = element.attrib['href']

en_names.append(link.split('/')[-2])

ch_names.append(element.text)

# 打印区县英文和中文名列表

for index, name in enumerate(en_names):

chinese_city_district_dict[name] = ch_names[index]

return en_names

def get_areas(district):

page = "http://sh.ke.com/xiaoqu/{0}".format(district)

areas = list()

try:

headers = create_headers()

response = requests.get(page, timeout=10, headers=headers)

html = response.content

root = etree.HTML(html)

links = root.xpath('//div[3]/div[1]/dl[2]/dd/div/div[2]/a')

# 针对a标签的list进行处理

for link in links:

relative_link = link.attrib['href']

# 去掉最后的"/"

relative_link = relative_link[:-1]

# 获取最后一节

area = relative_link.split("/")[-1]

# 去掉区县名,防止重复

if area != district:

chinese_area = link.text

chinese_area_dict[area] = chinese_area

# print(chinese_area)

areas.append(area)

return areas

except Exception as e:

print(e)

with open("sechouse.txt", "w", encoding='utf-8') as f:

# 开始获得需要的板块数据

total_page = 1

sec_house_list = list()

districts = get_districts()

for district in districts:

arealist = get_areas(district)

for area in arealist:

# 中文区县

chinese_district = chinese_city_district_dict.get(district, "")

# 中文版块

chinese_area = chinese_area_dict.get(area, "")

page = 'http://sh.ke.com/ershoufang/{0}/'.format(area)

print(page)

headers = create_headers()

response = requests.get(page, timeout=10, headers=headers)

html = response.content

soup = BeautifulSoup(html, "lxml")

# 获得总的页数

try:

page_box = soup.find_all('div', class_='page-box')[0]

matches = re.search('.*data-total-count="(\d+)".*', str(page_box))

total_page = int(math.ceil(int(matches.group(1)) / 10))

except Exception as e:

print(e)

print(total_page)

# 从第一页开始,一直遍历到最后一页

headers = create_headers()

for i in range(1, total_page + 1):

page = 'http://sh.ke.com/ershoufang/{0}/pg{1}'.format(area, i)

print(page)

response = requests.get(page, timeout=10, headers=headers)

html = response.content

soup = BeautifulSoup(html, "lxml")

# 获得有小区信息的panel

house_elements = soup.find_all('li', class_="clear")

for house_elem in house_elements:

price = house_elem.find('div', class_="totalPrice")

name = house_elem.find('div', class_='title')

desc = house_elem.find('div', class_="houseInfo")

pic = house_elem.find('a', class_="img").find('img', class_="lj-lazy")

# 继续清理数据

price = price.text.strip()

name = name.text.replace("\n", "")

desc = desc.text.replace("\n", "").strip()

pic = pic.get('data-original').strip()

# 作为对象保存

sec_house = SecHouse(chinese_district, chinese_area, name, price, desc, pic)

print(sec_house.text())

sec_house_list.append(sec_house)

for sec_house in sec_house_list:

f.write(sec_house.text() + "\n")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 11功能– Java飞行记录器

在本文中,我们将看到如何利用Java Flight Recorder功能作为Java 11的一部分。之前,它是商业功能之一。 但是,对于带有JEP 328的 Java 11,它是开源的。 Java Flight Recorder将OS和JVM事件记录到一个文件中,可以使用Jav…

MATLAB slider中的数值,在微信小程序中如何使用slider设置数据值

这篇文章主要介绍了微信小程序使用slider设置数据值及switch开关组件功能,结合实例形式分析了slider组件及switch组件的功能与使用方法,并附带源码供读者下载参考,需要的朋友可以参考下本文实例讲述了微信小程序使用slider设置数据值及switch开关组件功能。分享给大家供大家参考…

qstandarditemmodel 重写data函数后无法实现拖拽_实现类似百度网盘上传的功能

今天写到了上传文件部分,记录一下。前端使用了dropzone.js(用于实现文件上传的JS库),并对此文件进行了细微修改。说一下思路吧:首先界面长这样:点击上传文件,需要弹出一个对话框,对话框中有支持拖拽文件的文…

逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...

本文包括:重要概念逻辑斯蒂回归和线性回归二项逻辑斯谛回归模型逻辑斯蒂回顾与几率模型参数估计多项逻辑斯谛回归其它有关数据分析,机器学习的文章及社群1.重要概念:在正式介绍逻辑斯蒂回归模型之前,需要先对一些基本概念有所了解…

mysql 数据传输 定时,MySQL数据库定时备份的实现方法

1. 创建shell脚本2. 给shell脚本添加执行权限3. 给脚本添加定时任务crontab文件的说明:用户创建的crontab文件中,每一行都代表一项定时任务,每行的每个字段代表一项设置,它的格式每行共分为六个字段,前五段是时间设定字…

python 生意_本周互联网关注(2015515):劳动人民的生意经、python好还是go好

我很喜欢写这种类型的文章,写的也轻松,大家看的也多。性价比高。那么现在继续。一、所谓光辉岁月,不是波澜壮阔的时候,而是无人问津时,你对梦想的坚持。| 陈欧很多人刚开始创业时激情无比高涨,干着干着开始…

mysql空洞数据,Mysql 表空间和 数据页空洞

一、表空间1、表空间: innodb 引擎存储的最高层; 存放所有的数据2、独立表空间:Mysql 版本5.6 后默认开启的单表单空间(1)Innodb 默认存储引擎页的大小为 16K ;默认表空间 大小为96k(2)独立表空间 开启方式 innodb_file_per_table…

junit 5测试异常处理_在JUnit中处理异常的3种方式。 选择哪一个?

junit 5测试异常处理在JUnit中,有3种流行的方式来处理测试代码中的异常: 试捕习语 使用JUnit规则 带注解 我们应该使用哪一个?何时使用? 试捕习语 这个习语是最受欢迎的习语之一,因为它已在JUnit 3中使用。 Test…

python网站数据写入mysql_python网络爬虫抓取动态网页并将数据存入数据库MySQL

简述以下的代码是使用python实现的网络爬虫,抓取动态网页 http://hb.qq.com/baoliao/ 。此网页中的最新、精华下面的内容是由JavaScript动态生成的。审查网页元素与网页源码是不同。以上是网页源码以上是审查网页元素所以此处不能简单的使用正则表达式来获取内容。以…

交通流预测 | Matlab基于KNN-BiLSTM的交通流预测(对比SVR、LSTM、GRU、KNN-LSTM)

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 交通流预测 | Matlab基于KNN-BiLSTM的交通流预测(对比SVR、LSTM、GRU、KNN-LSTM) 程序设计 完整程序和数据获取方式:私信博主回复Matlab基于KNN-BiLSTM的交通流预测(对…

JMetro“ Metro”选项卡,Java的TreeView和ContextMenu(JavaFX)

我刚刚发布了JMetro的新更新,将版本升级到3.3.0。 在此更新中,您将找到: 新的TreeView Fluent设计系统(Metro)启发风格; 新的Tabs和TabPane FDS启发风格; 新的上下文菜单采用深色FDS启发的样…

蒙特卡罗计算积分matlab,matlab下二重积分的蒙特卡洛算法

%%monte_carlo_ff.m%被积函数(二重)function ffmonte_carlo_ff(x,y)ffx*y^2;%函数定义处end%%monte_carlo.m%蒙特卡洛计算二重积分function resultmonte_carlo(a,b,c,d,n,m)%先y后x积分,a是x积分下限,b是x积分上限,c是y积分下限,d…

数据挖掘原理与算法_技术分享|大数据挖掘算法之FPGrowth算法

程一舰数据技术处我们常说我们生活在信息时代,实际上,我们更多的还是生活在数据时代。因为从过去到现在累积了大量的数据,对数据的挖掘和分析也仅是从最近几年大数据和人工智能技术的发展而兴起。我们对现有数据价值的利用还远低于数据本身拥…

centos 程序 mysql数据库文件位置,CentOS 更改MySQL数据库目录位置

引言:由于MySQL的数据库太大,默认安装的/var盘已经再也无法容纳新增加的数据,没有办法,只能想办法转移数据的目录。下面我简单整理一下这几天把MySQL从/var/lib/mysql目录下面转移到/home/mysql_data/mysql下面具体操作1、首先我们…

neo4j数据浏览器_Neo4j:在Neo4j浏览器的帮助下探索新数据集

neo4j数据浏览器在查看新的Neo4j数据库时,我发现遇到的一件困难就是确定其中包含的数据的结构。 我习惯于关系数据库,在该数据库中您可以轻松获取表列表和外键,以便您将它们相互连接。 传统上,使用Neo4j时很难做到这一点&#x…

mfc中怎么集成文件_怎么把几个pdf合并并打印在一份文件中?

a为什么我们要把pdf文件合并呢?当然我们要知道什么是pdf文件才能进行更多的操作,Pdf是我们许多人都会用到的一种存储文件的格式,它的内容基本是以图像的形式表现,所以我们在播放和打印的时候可以不用担心出现格式错乱的问题。PDF格…

php中日期选择代码,实现JS日期时间选择器

这次给大家带来实现JS日期时间选择器,实现JS日期时间选择器的注意事项有哪些,下面就是实战案例,一起来看一下。flatpickr 是一个轻量级、注重精益、由 UX 驱动和可扩展的 JavaScript 日期时间选择器。下载 演示 GitHubflatpickr 不依赖于任何…

Jib –为Spring Boot应用程序构建docker映像

使用Jib为示例Spring Boot应用程序创建docker映像是如此容易,这让我感到惊喜。 让我首先将Jib与以前使用的方法进行对比。 我正在使用bmuschko出色的gradle-docker插件创建docker映像。 如果可以访问docker守护程序以及基于dockerfile或直接Dockerfile的gradle ds…

python中正则表达式是什么意思_python – 正则表达式中[^.] *的含义是什么?

我试图从以下文本中获得482.75&#xff1a;< span id “yfs_l84_aapl”> 482.75< / span>我使用的正则表达式是&#xff1a;regex ’< span id “yfs_l84 _ [^.] *”>(.&#xff1f;)< / span>‘它起作用了.但是我不明白的是为什么[^.] *可以在这里匹配…

php steam 第三方登录,Steam第三方登录

Steam第三方登录Laravel PHP7.3前端登录界面if(isset($steamprofile))window.οnlοadfunction(){var steamprofile {!!$steamprofile!!};var steamid {{$steamid}};if(steamid){$.post(/ajax/SocilaAuthLogin,{data:{userdata:steamprofile,type:steamLogin},},function(dat…