Scrapy爬取58同城二手房目标网站url地址为https://cq.58.com/ershoufang/。 1、要求爬取重庆挂牌出售的全部二手房信息。爬取信息包括卖点、楼盘、楼盘地址、房屋户型、楼层、建筑年代、每平单价、房屋总价。
时间: 2024-06-08 18:06:55 浏览: 137
好的,以下是爬取58同城重庆二手房信息的代码示例,你可以参考一下:
```python
import scrapy
class ChongqingErshoufangSpider(scrapy.Spider):
name = 'chongqing_ershoufang'
allowed_domains = ['cq.58.com']
start_urls = ['https://cq.58.com/ershoufang/']
def parse(self, response):
# 获取当前页所有房源的url
house_urls = response.css('.listUl > li > div.img_list > a::attr(href)').extract()
for url in house_urls:
yield scrapy.Request(url, callback=self.parse_house_info)
# 获取下一页的url
next_page_url = response.css('.next::attr(href)').extract_first()
if next_page_url:
yield scrapy.Request(next_page_url, callback=self.parse)
def parse_house_info(self, response):
item = {}
item['title'] = response.css('.house-title h1::text').extract_first().strip()
item['community'] = response.css('.communityName a::text').extract_first().strip()
item['address'] = response.css('.areaName a::text').extract_first().strip()
item['layout'] = response.css('.house-desc-item:nth-child(1) span:nth-child(2)::text').extract_first().strip()
item['floor'] = response.css('.house-desc-item:nth-child(2) span:nth-child(2)::text').extract_first().strip()
item['year'] = response.css('.house-desc-item:nth-child(3) span:nth-child(2)::text').extract_first().strip()
item['unit_price'] = response.css('.price .price_main b::text').extract_first().strip()
item['total_price'] = response.css('.price .total::text').extract_first().strip()
yield item
```
解释一下代码:
1. 首先定义了一个爬虫类 `ChongqingErshoufangSpider`,指定了爬虫名字、允许爬取的域名以及起始url。
2. 在 `parse` 方法中,首先获取当前页所有房源的url,并对每个url发送一个回调请求,调用 `parse_house_info` 方法解析房源信息。
3. 然后获取下一页的url,如果存在则继续发送请求,回调 `parse` 方法。
4. 在 `parse_house_info` 方法中,通过CSS选择器获取房源的各项信息,并将其存储在一个字典类型的item中,最后通过 `yield` 返回。
5. Scrapy会将所有的item收集起来,最终输出为一个json文件或其他格式的文件,具体格式可以在 `settings.py` 中进行配置。
希望这个代码示例对你有所帮助!
阅读全文