当前位置:   article > 正文

Python爬取链家租房信息并保存数据至本地

python爬取链家租房信息

 我选择爬虫作为python期末作业,爬取成都链家租房网站信息。

先说一下我的思路:

1、请求租房首页,获取列表中各个房屋的详情页url

2、请求各个房屋的详情页,爬取其中的房屋详情信息

3、翻页,爬取更多数据

4、保存数据至本地

首先打开我们的目标网站,我想爬的是链家官方的锦江区一居室,七百多条条数据完全够用了。

然后鼠标右键进行检查:

发现href中的url,这是我们第二次请求所需要的

  1. import parsel
  2. import random
  3. import requests
  4. import pprint
  5. import csv
  6. import re
  7. from bs4 import BeautifulSoup
  8. import time
  9. user_agents =[
  10. 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
  11. 'Opera/9.25 (Windows NT 5.1; U; en)',
  12. 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
  13. 'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
  14. 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
  15. 'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
  16. 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0',
  17. ]
  18. agent = random.choice(user_agents)
  19. headers = {
  20. 'User-Agent': agent
  21. }
  22. response = requests.get(url=url,headers=headers)
  23. #parsel模块无法直接对字符串数据解析提取
  24. selector = parsel.Selector(response.text)
  25. #css选择器,根据标签属性内容提取对应数据
  26. href = selector.css('#content > div.content__article > div.content__list > div > a::attr(href)').getall()

接下来查看房屋详情页,我想要的是标题、月租价格、以及”房屋信息“中的面积、朝向、楼层、电梯、车位、用水、用电、燃气、采暖这些信息。 

 

  1. for index in href:
  2. link = "https://cd.lianjia.com"+index
  3. print(link)
  4. house_data = requests.get(url=link,headers=headers).text
  5. selector_house = parsel.Selector(house_data)
  6. title = selector_house.css('body > div.wrapper > div > div.content.clear.w1150 > div.top_content > div.top_left > p::text').get().replace(" ","").replace("\n","")
  7. price = selector_house.css('#aside > div.content__aside--title > span::text').get()
  8. house_info = selector_house.css('#info > ul > li::text').getall()
  9. area = house_info[1][3:]
  10. direction = house_info[2][3:]
  11. floor = house_info[7][3:]
  12. lift = house_info[8][3:]
  13. car = house_info[10][3:]
  14. water = house_info[11][3:]
  15. electricity = house_info[13][3:]
  16. gas = house_info[14][3:]
  17. heating = house_info[16][3:]
  18. info = {
  19. '详情页': link,
  20. '标题': title,
  21. '月租': price,
  22. '面积': area,
  23. '朝向': direction,
  24. '楼层': floor,
  25. '电梯': lift,
  26. '车位': car,
  27. '用水': water,
  28. '用电': electricity,
  29. '燃气': gas,
  30. '暖气': heating
  31. }
  32. # pprint.pprint(info)
  33. print(info)

保存至本地:

  1. f = open('house_data.csv',mode='a',encoding='utf-8',newline='')
  2. csv_writer = csv.DictWriter(f, fieldnames=[
  3. '标题',
  4. '月租',
  5. '面积',
  6. '朝向',
  7. '楼层',
  8. '电梯',
  9. '车位',
  10. '用水',
  11. '用电',
  12. '燃气',
  13. '暖气',
  14. '详情页'
  15. ])
  16. # 写入表头
  17. csv_writer.writeheader()

 记得import csv,以及在info字典后面加上:

csv_writer.writerow(info)

于是变成了这样:

  1. info = {
  2. '详情页': link,
  3. '标题': title,
  4. '月租': price,
  5. '面积': area,
  6. '朝向': direction,
  7. '楼层': floor,
  8. '电梯': lift,
  9. '车位': car,
  10. '用水': water,
  11. '用电': electricity,
  12. '燃气': gas,
  13. '暖气': heating
  14. }
  15. # pprint.pprint(info)
  16. csv_writer.writerow(info)
  17. print(info)

获取多页:(需要通过观察和尝试,此处不赘述)

学习跳转链接:在万维网爬虫中进行翻页爬取的三种常用方案-CSDN博客

  1. for i in range(1,27):
  2. url=f'https://cd.lianjia.com/zufang/jinjiang/ab200301001000pg{i}l0/'

可以跑起来了,但是出现了报错:

打印出错的url地址,发现这个页面的结构和其他的不同

 

于是把它也加上 

  1. title = selector_house.css('body > div.wrapper > div > div.content.clear.w1150 > div.top_content > div.top_left > p::text'
  2. or 'body > div.wrapper > div:nth-child(2) > div.content.clear.w1150 > p::text').get().replace(" ","").replace("\n","")

 但是仍然会报错,我就把replace删了,最后把七百多条全爬完了,在excel表格里手工修改了一下格式:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/504290
推荐阅读
相关标签
  

闽ICP备14008679号