Python爬虫新手入门教学(三):爬取链家二手房数据

港控/mmm° 2023-01-11 03:44 271阅读 0赞

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

Python爬虫、数据分析、网站开发等案例教程视频免费在线观看

  1. https://space.bilibili.com/523606542

" class="reference-link">a2b6984089fbb14c9cf0ff607a09682a.png

前文内容

Python爬虫新手入门教学(一):爬取豆瓣电影排行信息

Python爬虫新手入门教学(二):爬取小说

基本开发环境

  • Python 3.6
  • Pycharm

相关模块的使用

  • requests
  • parsel
  • csv

安装Python并添加到环境变量,pip安装需要的相关模块即可。

一、明确需求

Python爬虫新手入门教学(三):爬取链家二手房数据

爬取图上所框的内容

二、请求网页

打开开发者工具( F12或者鼠标右键点击检查 )选择 notework 查看数据返回的内容。

Python爬虫新手入门教学(三):爬取链家二手房数据

通过开发者工具可以看到,网站是静态网页数据,请求url地址是可以直接获取数据内容的。

  1. url = 'https://cs.lianjia.com/ershoufang/'
  2. headers = {
  3. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
  4. }
  5. response = requests.get(url=url, headers=headers)
  6. print(response.text)

如果你不知道,返回的数据中是否有你想要的内容,你有复制网页的内容,在pycharm的输出结果中进行搜索查看。

Python爬虫新手入门教学(三):爬取链家二手房数据

三、解析数据

既然网站是静态网页数据,那么就可以直接在开发者工具中 Elements 查看数据在哪

Python爬虫新手入门教学(三):爬取链家二手房数据

如上图所示,相关的数据内容都包含在 li 标签里面。通过 parsel 解析库,进行解析提取数据就可以了。

  1. selector = parsel.Selector(response.text)
  2. lis = selector.css('.sellListContent li')
  3. for li in lis:
  4. # 标题
  5. title = li.css('.title a::text').get()
  6. # 地址
  7. positionInfo = li.css('.positionInfo a::text').getall()
  8. # 小区
  9. community = positionInfo[0]
  10. # 地名
  11. address = positionInfo[1]
  12. # 房子基本信息
  13. houseInfo = li.css('.houseInfo::text').get()
  14. # 房价
  15. Price = li.css('.totalPrice span::text').get() + '万'
  16. # 单价
  17. unitPrice = li.css('.unitPrice span::text').get().replace('单价', '')
  18. # 发布信息
  19. followInfo = li.css('.followInfo::text').get()
  20. dit = {
  21. '标题': title,
  22. '小区': community,
  23. '地名': address,
  24. '房子基本信息': houseInfo,
  25. '房价': Price,
  26. '单价': unitPrice,
  27. '发布信息': followInfo,
  28. }
  29. print(dit)

当我运行的时候发现报错了。

Python爬虫新手入门教学(三):爬取链家二手房数据

IndexError: list index out of range 超出索引范围了。
遇事不要慌, 取0超出索引范围,说明数据并没有取到,所以我们要看一下 <精装好房…> 这个信息下面那一个是什么情况。

Python爬虫新手入门教学(三):爬取链家二手房数据

搜索发现,这个中间插入了一条广告,也是li标签里面的,所以做一个简单的判断就好了,它是一个广告并没有标题,判断是否有标题就可以了,有就爬取相关内容,没有就pass掉。

  1. for li in lis:
  2. # 标题
  3. title = li.css('.title a::text').get()
  4. if title:
  5. # 地址
  6. positionInfo = li.css('.positionInfo a::text').getall()
  7. # 小区
  8. community = positionInfo[0]
  9. # 地名
  10. address = positionInfo[1]
  11. # 房子基本信息
  12. houseInfo = li.css('.houseInfo::text').get()
  13. # 房价
  14. Price = li.css('.totalPrice span::text').get() + '万'
  15. # 单价
  16. unitPrice = li.css('.unitPrice span::text').get().replace('单价', '')
  17. # 发布信息
  18. followInfo = li.css('.followInfo::text').get()
  19. dit = {
  20. '标题': title,
  21. '小区': community,
  22. '地名': address,
  23. '房子基本信息': houseInfo,
  24. '房价': Price,
  25. '单价': unitPrice,
  26. '发布信息': followInfo,
  27. }
  28. print(dit)

Python爬虫新手入门教学(三):爬取链家二手房数据

这样就不会报错了。

四、保存数据(数据持久化)

和爬取豆瓣的电影信息是一样的,使用csv模块,把数据保存到Excel里面

  1. # 创建文件
  2. f = open('二手房数据.csv', mode='a', encoding='utf-8', newline='')
  3. csv_writer = csv.DictWriter(f, fieldnames=['标题', '小区', '地名', '房子基本信息',
  4. '房价', '单价', '发布信息'])
  5. # 写入表头
  6. csv_writer.writeheader()
  7. ''''
  8. ''''
  9. csv_writer.writerow(dit)

五、多页爬取

  1. # 第二页url地址
  2. url_2 = 'https://cs.lianjia.com/ershoufang/pg2/'
  3. # 第三页url地址
  4. url_3 = 'https://cs.lianjia.com/ershoufang/pg3/'
  5. # 第四页url地址
  6. url_4 = 'https://cs.lianjia.com/ershoufang/pg4/'

Python爬虫新手入门教学(三):爬取链家二手房数据

通过以上的内容,只需要for 循环遍历 pg的参数 即可多页爬取

  1. for page in range(1, 101):
  2. url = f'https://cs.lianjia.com/ershoufang/pg{page}/'

这样就可以进行多页爬取了。

实现效果

Python爬虫新手入门教学(三):爬取链家二手房数据

发表评论

表情:
评论列表 (有 0 条评论,271人围观)

还没有评论,来说两句吧...

相关阅读