使用scrapy写一个关于重庆安居客二手房楼盘名称、地址、单价、总价、户型、面积、建造年代的爬虫
时间: 2023-10-22 12:08:48 浏览: 142
好的,以下是使用Scrapy框架编写的爬虫代码:
```python
import scrapy
class AnjukeSpider(scrapy.Spider):
name = 'anjuke'
allowed_domains = ['cq.anjuke.com']
start_urls = ['https://cq.anjuke.com/sale/']
def parse(self, response):
# 获取当前页面的所有二手房链接
house_links = response.xpath('//div[@class="house-title"]/a/@href')
for link in house_links:
yield scrapy.Request(link.extract(), callback=self.parse_house)
# 获取下一页的链接,继续爬取
next_page = response.xpath('//a[@class="aNxt"]/@href')
if next_page:
yield scrapy.Request(next_page.extract_first(), callback=self.parse)
def parse_house(self, response):
# 解析房屋详情页,获取需要的信息
name = response.xpath('//h1[@class="long-title"]/text()')
address = response.xpath('//div[@class="loc-txt"]/a/text()')
price = response.xpath('//span[@class="price-det"]/strong/text()')
total_price = response.xpath('//div[@class="price"]/span[@class="price-det"]/text()')
room_type = response.xpath('//div[@class="room"]/div[@class="main-info"]/text()')
area = response.xpath('//div[@class="area"]/div[@class="main-info"]/text()')
build_year = response.xpath('//div[@class="msg"]/p[2]/text()')
# 提取文本信息
name = name.extract_first().strip() if name else ''
address = address.extract()[-1].strip() if address else ''
price = price.extract_first().strip() if price else ''
total_price = total_price.extract_first().strip() if total_price else ''
room_type = room_type.extract_first().strip() if room_type else ''
area = area.extract_first().strip() if area else ''
build_year = build_year.extract()[1].strip() if build_year else ''
# 返回数据字典
yield {
'楼盘名称': name,
'地址': address,
'单价': price,
'总价': total_price,
'户型': room_type,
'面积': area,
'建造年代': build_year
}
```
爬虫的入口链接为 https://cq.anjuke.com/sale/ ,爬虫会自动获取该页面中所有二手房的链接,并依次爬取每个二手房的详情页。在每个详情页中,爬虫会提取需要的信息,并将其存储在一个数据字典中,最终通过yield返回给调用者。如果有下一页,爬虫会继续爬取下一页的链接,直到爬取完所有二手房为止。
阅读全文