本文作者:任 哲,中南财经政法大学经济学院
文字编辑:王子一
技术总编:张馨月
爬虫俱乐部云端课程
9月24日,一份名为《恒大集团有限公司关于恳请支持重大资产重组项目的情况报告》的文件在网络上广为流传,恒大一时间站在了风口浪尖之上。但很快恒大集团很快就辟谣处理,并且在9月30日与战略投资者达成协议,化解了传闻中即将到期的1300亿债务危机。恒大究竟凭借什么来与战略投资者进行谈判,我们不得而知,但是恒大的依仗,肯定和其地产项目离不开关系。
那么恒大地产作为国内房地产龙头企业之一,布局全国,具体下来又有多少地产项目呢?今天小编就带你一起爬取恒大官网,一起了解恒大的地产布局。
爬虫思路
我们进入恒大的官网,在首页找到地区公司选项,点击即可看到恒大在全国的所有分公司。

以华东公司为例,打开Chrome浏览器的开发者模式,可以看到公司的官网链接在href属性之中。

进入华东公司的官网,再点击精品项目,便会出现该地区楼盘列表,接下来就可以根据楼盘列表爬取所有地区的楼盘。

具体操作
1.单个地区抓取
正式操作之前,引用我们所需的包,在本例中,由于要不停的更改需要爬取的网页,我们选择selenium来模拟鼠标操作帮助我们爬取:
from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import TimeoutExceptionfrom lxml import etreeimport reimport pandas as pdimport timeimport os
首先,对selenium进行设置,打开恒大官网:
#设置seleniumCHROME_OPTIONS = webdriver.ChromeOptions()prefs = {"profile.managed_default_content_settings.images":2} # 1代表显示图片,2代表不显示图片CHROME_OPTIONS.add_experimental_option("prefs", prefs)#打开恒大官网url = "https://www.evergrande.com/Home"CHROME_DRIVER = './Driver/chromedriver.exe'driver = webdriver.Chrome(executable_path=CHROME_DRIVER, options=CHROME_OPTIONS) # 初始化浏览器driver.set_window_position(0, 0)driver.maximize_window() # 设置浏览器窗口最大化driver.get(url) # 打开要访问的页面
我们在官网中,找到地区公司的xpath,得到各分公司的名单并借助href属性模拟点击分公司的网址。同时,为方便后期分析,把分公司所在地区保留在region之中。这里以华东分公司为例,代码如下:
driver.find_element_by_xpath("""//a[@class='ad_a1']""").click()time.sleep(2)html = driver.page_source # 获取页面源代码tree = etree.HTML(html)#各地分公司的网址都在属性之中filiale_xpath = "//div[@class='innerWrapper']/ul/li[1]/a/@href"filiale_web = tree.xpath(filiale_xpath)filiale_web = filiale_web[0] #提取网址filiale_web = str(filiale_web) #将网址转化为字符型#为方便后期分析,把分公司所在地区保留在region之中region_xpath = "//div[@class='innerWrapper']/ul/li[1]/a/text()"region=tree.xpath(region_xpath)region=region[0]region=str(region)region=region[0:-2]
在打开分公司网站之后,再利用selenium模拟点击精品项目选项就可以打开楼盘列表进行爬取了。代码如下:
#爬取各个分公司的楼盘项目driver.get(filiale_web)driver.find_element_by_xpath("""//ul/li[@id='nav4']/a[@class='navA']""").click()time.sleep(2)estate_list=[]estate_xpath = "//ul[@id='cl']/li/a/p[@class='title']"estate_list = driver.find_elements_by_xpath(estate_xpath)region_list = [region]*len(estate_list)
通过上述操作,便可将华东分公司的楼盘信息保存到estate_list当中,结果如下:

2.所有地区抓取
接下来,我们需要爬取其余公司的信息。通过观察可以发现各地分公司的xpath具有一定的规律,我们可以直接利用循环爬取所有公司的信息。在循环之中,我们添加一些代码进行完善:
#设置列表,将每个分公司的数据拼接进去all_estate=[]all_region=[]for num in range(1,27):#打开地区公司,获取每个分公司的网址driver.find_element_by_xpath("""//a[@class='ad_a1']""").click()time.sleep(2)html = driver.page_source # 获取页面源代码tree = etree.HTML(html)#各地分公司的网址都在属性之中filiale_xpath = "//div[@class='innerWrapper']/ul/li[%g]/a/@href"%numfiliale_web = tree.xpath(filiale_xpath)filiale_web = filiale_web[0] #提取网址filiale_web = str(filiale_web) #将网址转化为字符型#为方便后期分析,把分公司所在地区保留在region之中region_xpath = "//div[@class='innerWrapper']/ul/li[%g]/a/text()"%numregion=tree.xpath(region_xpath)region=region[0]region=str(region)region=region[0:-2]#判断网页是否正常打开try :driver.get(filiale_web)print(region,"分公司官网正常打开")except :print(region,"分公司官网无法打开")print(filiale_web)driver.get(url) #重新打开恒大官网time.sleep(2)continue#爬取各个分公司的楼盘项目driver.find_element_by_xpath("""//ul/li[@id='nav4']/a[@class='navA']""").click()time.sleep(2)estate_list=[]estate_xpath = "//ul[@id='cl']/li/a/p[@class='title']"estate_list = driver.find_elements_by_xpath(estate_xpath)region_list = [region]*len(estate_list)for estate,region in zip (estate_list,region_list) :all_estate.append(estate.text)all_region.append(region)#为了下次循环顺利进行,重新打开恒大官网driver.get(url)time.sleep(2)
最后,我们发现河南分公司无法正常打开。通过直接百度进入恒大河南分公司我们发现,河南分公司xpath的href属性提供的网址(http://hnzz.evergrande.com/)是错误的(扣鸡腿!),正确网址的应该是https://hdzy.evergrande.com/。这样,河南分公司的楼盘信息只好单独爬取了。
3.结果分析

从地域上来看,恒大地产布局空间很广,几乎在中国大陆各个地区都设有分公司。其中广东省作为恒大集团的大本营,一省拥有两家分公司:珠三角公司与深圳公司,共有楼盘120个,当之无愧地夺得冠军!
本次推文的内容到这里就全部结束了,如果你觉得有所收获,请不要忘记点赞哦~
(ps:完整的程序和数据可以在后台回复“恒大楼盘”来获取~)
震惊!知名数据分析软件竟被某度翻译“亲切称呼”为“斯塔塔”
喜临涛门,月满人圆
字符串函数总动员
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

