Python爬取房天下二手房信息
一、相关知识
- BeautifulSoup4使用
- python将信息写入csv
import csv
with open("11.csv","w") as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(["a","b","c"])
    writer.writerows([[1,1,1],[2,2,2],[3,3,3]])
二、目标
要求爬取房天下各大城市的二手房信息(www.fang.com)
 需爬取所有城市的二手房信息,并存在csv文件中,可以所有数据放在一个文件中,但要记录是哪个省,哪个城市。也可以每个城市的数据放在一个csv文件中。要求爬取每个房源信息包括标题、面积、价格、地址等信息。
三、实现思路
1.准备工作
获取网址并解析
- 分析房天下各城市各页的网址,得出大部分城市某页的网址为 https://城市.esf.fang.com/?i=30+页数
- 解析网页为文本:
def response(url, headers):
    html = requests.get(url=url, headers=headers)
    html.encoding = html.apparent_encoding
    return html.text
2.获取所有城市及对应网址
解析该网页代码,获取各城市名及链接,并存到列表
 
3.遍历城市,获取所需信息
- 先获取每个城市的页数,然后每个城市每页依次解析
- 通过f12查看网页源代码,分析所需信息
4.将分解的信息存到csv中
四、完整代码
# -*- coding:utf-8 -*-
import requests
from lxml import etree
import re
import csv
from bs4 import BeautifulSoup
from pyasn1.compat.octets import null
headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
        }
def response(url, headers):
    html = requests.get(url=url, headers=headers)
    html.encoding = html.apparent_encoding
    return html.text
def crawl(url, write, headers):
    html = response(url,headers)
    soup = BeautifulSoup(html, 'lxml')
    titles = []  # 存放所有房源标题的列表
    house_types = []  # 存放所有房源房型的列表
    sizes = []  # 存放所有房源面积的列表
    floors = []  # 存放所有房源楼层的列表
    orientations = []  # 存放所有房源朝向的列表
    addrs = []  # 存放所有房源地址的列表
    totals = []  # 存放所有房源总价的列表
    prices = []  # 存放所有房源单价的列表
    items1 = soup.find_all('span', class_="tit_shop")
    for item in items1:
        titles.append(item.string.split()[0])
    items2 = soup.find_all('p', class_="tel_shop")
    for item in items2:
        house_types.append(item.contents[0].split()[0])
        sizes.append(item.contents[2].split()[0])
        floors.append(item.contents[4].split()[0])
        orientations.append(item.contents[6].split()[0])
    items4 = soup.find_all('p', class_="add_shop")
    for item in items4:
        addrs.append(item.contents[3].string)
    items5 = soup.find_all('dd', class_="price_right")
    for item in items5:
        totals.append(item.contents[1].contents[1].string)
        prices.append(item.contents[3].string)
    for i in range(len(titles)):
        write.writerow([titles[i], house_types[i], sizes[i], floors[i], orientations[i], addrs[i], totals[i],prices[i]])
def crawlCity(url2,headers,address_list,hrefs):
    html2 = response(url2,headers)
    soup = BeautifulSoup(html2, 'lxml')
    items = soup.find_all('a', class_="red")
    for item in items:
        address_list.append(item.string)
        hrefs.append(item['href'])
def crawlPage(url,headers):
    html = response(url, headers)
    items = re.findall("共(.*)页",html)
    if(len(items)==0):
        return 0
    else:
        for item in items:
            return item
def main():
    totalpage = 0
    address_list = []
    hrefs = []
    url2 = 'https://gz.esf.fang.com/newsecond/esfcities.aspx'
    crawlCity(url2, headers,address_list,hrefs)
    key = ['标题', '户型', '面积', '楼层', '朝向', '地址', '总价/万', '单位价格']  # ,'总价','单位价格']
    for i in range(len(address_list)):
        with open('{}.csv'.format(address_list[i]), 'a', newline='', encoding='utf-8') as fp:
            write = csv.writer(fp)
            write.writerow(key)
            print('现在爬取%s的二手房信息' % address_list[i])
            pageurl = "http:"+hrefs[i]
            if(crawlPage(pageurl,headers)==0):
                print("该城市无房源信息\n")
                continue
            else:
                totalpage=int(crawlPage(pageurl,headers))
                for page in range(1, totalpage+1):
                    pages = (str)(page + 30)
                    new_url = "http:"+hrefs[i]+"/?i="+pages
                    crawl(new_url, write, headers)
                    print('第%s页爬取完成' % page)
                print('已完成%s爬取' % address_list[i])
                print('\n')
if __name__ == '__main__':
    main()
五、实现结果

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
Python爬取房天下二手房信息的更多相关文章
- python爬虫项目(scrapy-redis分布式爬取房天下租房信息)
		python爬虫scrapy项目(二) 爬取目标:房天下全国租房信息网站(起始url:http://zu.fang.com/cities.aspx) 爬取内容:城市:名字:出租方式:价格:户型:面积: ... 
- python爬取链家二手房信息,确认过眼神我是买不起的人
		前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ... 
- Python 爬取 房天下
		... import requests from requests import ConnectionError from bs4 import BeautifulSoup import pymong ... 
- python爬取房天下数据Demo
		import requests from bs4 import BeautifulSoup res = requests.get('http://sh.esf.fang.com/chushou/3_3 ... 
- 用Python爬取智联招聘信息做职业规划
		上学期在实验室发表时写了一个爬取智联招牌信息的爬虫. 操作流程大致分为:信息爬取——数据结构化——存入数据库——所需技能等分词统计——数据可视化 1.数据爬取 job = "通信工程师&qu ... 
- python爬取 “得到” App 电子书信息
		前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 静觅 崔庆才 PS:如有需要Python学习资料的小伙伴可以加点击下 ... 
- python爬取北京政府信件信息01
		python爬取,找到目标地址,开始研究网页代码格式,于是就开始根据之前学的知识进行爬取,出师不利啊,一开始爬取就出现了个问题,这是之前是没有遇到过的,明明地址没问题,就是显示网页不存在,于是就在百度 ... 
- python爬取安居客二手房网站数据(转)
		之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信息吧! 在 ... 
- Python爬取链家二手房源信息
		爬取链家网站二手房房源信息,第一次做,仅供参考,要用scrapy. import scrapy,pypinyin,requests import bs4 from ..items import L ... 
随机推荐
- 实战教程:如何将自己的Python包发布到PyPI上
			1. PyPi的用途 Python中我们经常会用到第三方的包,默认情况下,用到的第三方工具包基本都是从Pypi.org里面下载. 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具,目前 ... 
- CLH lock queue的原理解释及Java实现
			目录 背景 原理解释 Java代码实现 定义QNode 定义Lock接口 定义CLHLock 使用场景 运行代码 代码输出 代码解释 CLHLock的加锁.释放锁过程 第一个使用CLHLock的线程自 ... 
- appium快速入门
			appium快速入门 演示官方demo 第一步:启动安卓模拟器 步骤2:启动Appium桌面 step3:准备自动化脚本与待测APK step4:运行测试代码 分析演示 分析Appium的加载流程 使 ... 
- 关于你天天见到的JDK、JRE和JVM
			什么是JDK.JRE.JVM? 大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言.这时我们就需要为我们写的Java程序配备一名翻译官 ----- 编译环境,将Java程序 ... 
- MySQL(13)---MYSQL主从复制原理
			MYSQL主从复制原理 最近在做项目的时候,因为部署了 MYSQL主从复制 所以在这里记录下整个过程.这里一共会分两篇博客来写: 1.Mysql主从复制原理 2.docker部署Mysql主从复制实战 ... 
- 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人
			[NOIP2017提高A组模拟9.17]信仰是为了虚无之人 Description Input Output Sample Input 3 3 0 1 1 7 1 1 6 1 3 2 Sample O ... 
- Docker 跨平台在 netCore 中的从入门到部署
			前言 从题目我们可以看的出,今天是五部曲的第三部,你可能会好奇,为啥没有见到前两部呢?这里我简单说下: 1.跨平台第一部曲:MySql 如果你看我的所有开源项目,应该能发现我已经全部迁移到了Mysql ... 
- 大厂是如何用DevCloud流水线实现自动化部署Web应用的?
			DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ... 
- OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析
			☞ ░ 前往老猿Python博文目录 ░ 一.使用全局变量进行变量传递 OpenCV-Python中可以使用setMouseCallback来设置鼠标事件的回调函数,我们来看个样例. 1.1.案例1代 ... 
- PyQt学习随笔:PyQt中捕获键盘事件后获取具体按键值的方法
			在PyQt中,如果要捕获键盘事件的具体按键,可以通过重写组件对象的keyPressEvent方法或event方法来捕获具体的按键,推荐使用keyPressEvent方法,因为event方法是一个通用事 ... 
