爬取某房源网数据 - Python
爬取某房源数据,算加深对parsel库的使用。
1 """ 2 爬取房源 3 """ 4 5 import requests 6 import csv 7 import parsel 8 9 # 请求头 10 headers = { 11 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 12 } 13 # 要请求的地址 14 url = 'https://xx.newhouse.xx.com/house/s/' 15 16 # 请求后返回的状态码 17 response = requests.get(url, headers=headers) 18 19 # 开始解析数据 20 selector = parsel.Selector(response.text) 21 22 # 找到所有li标签 23 lis = selector.xpath('//div[@class="nl_con clearfix"]/ul/li[not(@style)]') # 取页面中所有的li标签,但是不要包含li有style属性的那行 24 25 # 开始循环 26 for li in lis: 27 name = li.xpath('.//div[@class="nlcd_name"]/a/text()').get() # 提取名称.表示当前节点 28 # 但是发现很多空白,假定这个name都有值 29 if name: 30 name = name.strip() # 去除左右两边的空白 31 price = li.xpath('.//div[@class="nhouse_price"]/*/text()').getall() # 价格 32 if price: 33 price = ''.join(price) # 将价格转换成字符串 34 else: 35 price = '暂未取得预售证!' 36 37 room = li.xpath('.//div[@class="house_type clearfix"]/a/text()').getall() # 几居室 38 if room: 39 room = '/'.join(room) 40 else: 41 room = '未知!' 42 43 area = li.xpath('.//div[@class="house_type clearfix"]/text()').re('[\d~平米]+') 44 if area: # 可能会存没有值的情况 45 area = area[0] 46 else: 47 area = '未知' 48 address = li.xpath('.//div[@class="address"]/a/@title').get() # 地址 49 sale = li.xpath('.//div[@class="fangyuan"]/span/text()').get().strip() # 是否在售 50 tel = li.xpath('.//div[@class="tel"]/p/text()').getall() # 电话联系方式 51 if tel: 52 tel = '转'.join(tel) 53 else: 54 tel = '电话号码未知!' 55 detailPage = li.xpath('.//div[@class="nlcd_name"]/a/@href').get() 56 print(name, price, room, area, address, sale, tel, detailPage, sep='---') 57 58 # 开始保存数据 59 with open('谋天下房源.csv', mode='a', encoding='utf-8-sig', newline='') as f: # 不加newline的话会有空行,后面的''表示消除空行 60 csvWriter = csv.writer(f) # 实例化一个对象 61 csvWriter.writerow([name, price, room, area, address, sale, tel, detailPage]) #把列表按一行一行写入