一、相关知识

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爬取房天下二手房信息的更多相关文章

  1. python爬虫项目(scrapy-redis分布式爬取房天下租房信息)

    python爬虫scrapy项目(二) 爬取目标:房天下全国租房信息网站(起始url:http://zu.fang.com/cities.aspx) 爬取内容:城市:名字:出租方式:价格:户型:面积: ...

  2. python爬取链家二手房信息,确认过眼神我是买不起的人

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  3. Python 爬取 房天下

    ... import requests from requests import ConnectionError from bs4 import BeautifulSoup import pymong ...

  4. python爬取房天下数据Demo

    import requests from bs4 import BeautifulSoup res = requests.get('http://sh.esf.fang.com/chushou/3_3 ...

  5. 用Python爬取智联招聘信息做职业规划

    上学期在实验室发表时写了一个爬取智联招牌信息的爬虫. 操作流程大致分为:信息爬取——数据结构化——存入数据库——所需技能等分词统计——数据可视化 1.数据爬取 job = "通信工程师&qu ...

  6. python爬取 “得到” App 电子书信息

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 静觅 崔庆才 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  7. python爬取北京政府信件信息01

    python爬取,找到目标地址,开始研究网页代码格式,于是就开始根据之前学的知识进行爬取,出师不利啊,一开始爬取就出现了个问题,这是之前是没有遇到过的,明明地址没问题,就是显示网页不存在,于是就在百度 ...

  8. python爬取安居客二手房网站数据(转)

    之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信息吧! 在 ...

  9. Python爬取链家二手房源信息

    爬取链家网站二手房房源信息,第一次做,仅供参考,要用scrapy.   import scrapy,pypinyin,requests import bs4 from ..items import L ...

随机推荐

  1. leetcode 33和 leetcode81

    //感想: 1.对于这两题,我真的是做到吐,这篇博客本来是昨晚准备写的,但是对于这个第二题,我真的做到头痛,实在是太尼玛的吐血了,主要是我也是头铁,非要找到那个分界点. 2.其实之前在牛客网上做过非常 ...

  2. Python JSON存储数据

    前言: 很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据.不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭 程序时,你几乎总是要保存他们提供的信 ...

  3. [LGOJ1273]有线电视网

    solution 用了一个很有意思的转移方法. $dp[i][j] $ 表达 \(i\) 作为根,\(j\)个终端时最大的收益,即钱数,当\(0\leq dp[1][i]\)时,即以1为根可以转移到\ ...

  4. 【P1588】丢失的牛——区间dp/bfs

    (题面来自Luogu) 题目描述 FJ丢失了他的一头牛,他决定追回他的牛.已知FJ和牛在一条直线上,初始位置分别为x和y,假定牛在原地不动.FJ的行走方式很特别:他每一次可以前进一步.后退一步或者直接 ...

  5. Rest Framework:序列化组件

    Django内置的serializers(把对象序列化成json字符串 from django.core import serializers def test(request): book_list ...

  6. IdentityServer4系列 | 客户端凭证模式

    一.前言 从上一篇关于 快速搭建简易项目中,通过手动或者官方模板的方式简易的实现了我们的IdentityServer授权服务器搭建,并做了相应的配置和UI配置,实现了获取Token方式. 而其中我们也 ...

  7. drf的权限扩充

    drf框架为我们提供了基本的权限验证.主要包括三种验证 1.AllowAny 所有用户 2.IsAuthenticated 验证过的用户 3.IsAdminUser 超级管理员 这些权限人员不一定满足 ...

  8. moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize介绍

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>介绍了剪辑基类的fl.fl_time.fx方法,在<movi ...

  9. 第15.46节、PyQt显示部件:OpenGL Widget部件功能简介及使用案例

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 OpenGL Widget部件是一个Op ...

  10. Jmeter录制脚本-BadBoy

    录制脚本方式: 1)Badboy录制Jmter脚本 2)Jmter代理服务录制脚本 方式一:Badboy录制脚本 安装Badboy 录制脚本 1.双击Badboy 2.输入URL 3.点击" ...