知识点:多线程,读取csv,xpath
import json
import csv
import requests
import threading
import lxml
import lxml.etree#递归锁
rLock=threading.RLock()headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'}#获取区域
def getAreaList(url):html=requests.get(url,headers=headers).textmytree=lxml.etree.HTML(html)areList=mytree.xpath('//div[@data-role="ershoufang"]//a')areaDict={}for area in areList:# 区域名areaName=area.xpath('./text()')[0]#urlareaUrl = 'https://gz.lianjia.com'+area.xpath('./@href')[0]#print(areaName,areaUrl)areaDict[areaName]=areaUrlprint(areaName,areaUrl)return areaDict#获取区域页数
def getAreaPage(areaUrl,areaName):html = requests.get(areaUrl, headers=headers).textmytree = lxml.etree.HTML(html)pageNum=mytree.xpath('//div[@class="page-box house-lst-page-box"]/@page-data')[0]pageNum=int(json.loads(pageNum)["totalPage"])#return int(pageNum)getHourseInfo(areaUrl, areaName, pageNum)#获取房子信息
def getHourseInfo(areaUrl,areaName,pageNum):for page in range(1,pageNum):#构造页码urlurl=areaUrl+'pg%d'%pagehtml = requests.get(url, headers=headers).textmytree = lxml.etree.HTML(html)#房子列表hourseList = mytree.xpath('//ul[@class="sellListContent"]/li')for hourse in hourseList:#房子标题hourseTitle=hourse.xpath('.//div[@class="title"]/a/text()')[0]#房子urlhourseUrl = hourse.xpath('.//div[@class="title"]/a/@href')[0]#地址信息hourseAddress=hourse.xpath('.//div[@class="houseInfo"]//text()')hourseAddress=hourseAddress[0]+hourseAddress[1]#位置xinxipositionInfo=hourse.xpath('.//div[@class="positionInfo"]//text()')positionInfo=positionInfo[0]+positionInfo[1]#总价totalPrice=hourse.xpath('.//div[@class="totalPrice"]//text()')totalPrice=totalPrice[0]+totalPrice[1]#单价unitPriceunitPrice = hourse.xpath('.//div[@class="unitPrice"]//text()')[0]data=[hourseTitle,hourseAddress,positionInfo,totalPrice,unitPrice,hourseUrl]print(data)#写入csvwith rLock:with open('./data/'+areaName+'.csv','a+') as f:writer=csv.writer(f)writer.writerow(data)if __name__ == '__main__':#广州二手房mainUrl='https://gz.lianjia.com/ershoufang/'#获取区域字典areaDict=getAreaList(mainUrl)threadList=[]for areaName,areaUrl in areaDict.items():# print(areaName)# #获取区域页码# pageNum=getAreaPage(areaUrl)# getHourseInfo(areaUrl,areaName,pageNum)t=threading.Thread(target=getAreaPage,args=(areaUrl,areaName))t.start()threadList.append(t)#保证线程正常结束for t in threadList:t.join()

爬取广州链家二手房并写入csv相关推荐

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

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

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

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

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

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

  4. 爬取广州链家租房信息,并用tableau进行数据分析

    在外工作,难免需要租房子,而链家是现在比较火的一个租房网站,本文章主要是爬取链家在广州的租房信息,并且进行简单的数据分析. 数据采集 如图所示,我们需要的信息主要是存放在这个标签里面,我们把信息采集下 ...

  5. 简单python脚本 爬取杭州链家二手房 房价信息

    爬取链家房价信息 主要使用以下库: requests BeautifulSoup 相关问题 当爬取次数太多的时候,可能会遇到被封的情况或者验证码, 大佬们可以自行解决,这个脚本里面我就不掺和了,毕竟我 ...

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

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

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

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

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

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

  9. 爬虫:一种打破3000套限制爬取所有链家二手房源的方法

    本人在爬取二手房的时候,发现链家网站的每个链接(https://sz.lianjia.com/ershoufang/pg100/)最多只能有100页,每页30套房源,那么就是3000套.很多网友也遇到 ...

最新文章

  1. websocket小荔枝
  2. ISA Server中基于L2TP实现远程拨入***
  3. [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版
  4. 机器学习中的异常检测手段
  5. [密码学] DES(二)
  6. 常见的加密算法 (转自: http://blog.chinaunix.net/uid-8735300-id-2017079.html 本文摘自网络 ,如有雷同 请及时联系我 谢谢)...
  7. 深度 | 一篇文章带你进入无监督学习:从基本概念到四种实现模型(附论文)
  8. Android背景色渐变效果(shape,gradient) (转)
  9. 股权证明pos记账权是根据不同节点_中币(ZB)说真的,区块链第四期:关于ETH2.0,你需要了解的——PoS...
  10. html css基础页面,一、必知HTML基础
  11. 用pythonturtle写名字_结婚请帖怎么写
  12. Python os.system()调用.sh脚本
  13. mysql systemctl开机启动_Linux 开机启动项命令:chkconfig 和 systemctl
  14. matlab editor 颜色,matlab编辑器颜色风格设置
  15. 单片机最小系统着实让人着迷
  16. 支付宝接口对接指南(一、支付宝文档解读和支付宝侧沟通)【保姆级】
  17. linux 添加 缺省 网关,CentOS 如何设置缺省网关
  18. 经典编程习题,用Java实现:矩阵转置、最大公约数和最小公倍数、计算自然对数的底e的值、输出1000以内的回文素数、判断两个年份之间的平闰年情况。
  19. 第三集 Spring for Apache Kafka 接受消息
  20. 机动车驾驶科一/科四

热门文章

  1. SpringBoot配置参数
  2. Linux 中 link 链接命令
  3. 博客系统前台页面设计
  4. c语言的右箭头的作用,C语言中点操作符(.)和箭头操作符(-)的不同之处
  5. Go语言GOPROXY设置
  6. 基于PHP+小程序(MINA框架)+Mysql数据库的共享停车位预约小程序系统设计与实现
  7. Vue与React两个框架的区别和优势对比
  8. 【学习笔记】正确写作美国大学生数学建模竞赛论文(已获得国二、美O)
  9. 阿里短信发送频率控制
  10. 511遇见易语言组合框添加不重复文本到列表框