爬取某房源网数据 - 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]) #把列表按一行一行写入

 

posted @ 2021-11-04 17:17  、一叶孤城  阅读(98)  评论(0编辑  收藏  举报