使用Scrapy框架爬取链家数据

该博客介绍了一个Scrapy爬虫项目,用于抓取链家网站上北京地区经纪人的姓名、负责区域和历史成交量,并将数据存储到MongoDB数据库中。爬虫通过循环页面URL获取经纪人列表,使用XPath解析HTML,提取所需信息,并通过自定义的MongoDB管道进行数据持久化。
摘要由CSDN通过智能技术生成

仅供个人学习,如有侵权联系删除
spider文件:lianjia.py

# -*- coding: utf-8 -*-
import scrapy
from pachong6.items import Pachong6Item

class LianjiaSpider(scrapy.Spider):
    name = 'lianjia'
    allowed_domains = ['m.lianjia.com']
    start_urls = ['https://m.lianjia.com/bj/jingjiren/ao22pg' + str(x) for x in range(1,4)]

    def parse(self, response):
        agentlist = response.xpath('//*[@class="jingjiren-list__agent-item"]')
        for agent in agentlist:
            item = Pachong6Item()
            item['name'] = agent.xpath('div/div/div[2]/div[1]/span/text()').extract_first()
            item['region'] = agent.xpath('div/div/div[2]/p/text()').extract_first()
            item['tran_num'] = agent.xpath('div/div/div[2]/div[3]/div[1]/span/text()').extract_first()
            # print("经纪人姓名:", item['name'])
            # print("经纪人所负责区域:", item['region'])
            # print("经纪人历史成交量为:", item['tran_num'])
            yield item

数据存入mongodb:

# -*- coding: utf-8 -*-

from pymongo import MongoClient

class Pachong6Pipeline(object):

    # 在open_spider方法中连接MongoDB,创建数据库和集合,也可以在__init__初始化方法中处理这些操作
    def open_spider(self, spider):
        dataIp = '127.0.0.1'
        dataPort = 27017
        dbName = 'lianjia_db'
        sheetName = 'collections_db'
        # 获取数据库连接
        self.client = MongoClient(dataIp, dataPort)
        # 指定数据库
        self.db = self.client[dbName]
        # 指定集合
        self.collection = self.db[sheetName]

    def close_spider(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        # 把Item转化成字典方式,然后添加数据
        #print("item数据:", item)
        self.collection.insert_one(dict(item))
        # return item

结果:
在这里插入图片描述

Scrapy是一个强大的Python网络爬虫框架,用于高效地抓取网站数据。如果你想通过Scrapy链家爬取所有城市的数据,你需要遵循一些基本步骤: 1. **安装 Scrapy**:首先确保已安装Scrapy和其他依赖库,如requests、lxml等。如果还没有安装,可以使用`pip install scrapy`命令。 2. **创建项目**:在终端或命令行中,运行`scrapy startproject lianjia_spider` 创建一个新的Scrapy项目,并选择合适的命名。 3. **定义 Spider**:在`spiders`文件夹下创建一个新的Python文件,例如`lianjia_city.py`,定义Spider类。在这个类中,设置起始URL(链家首页的城市列表页),并编写解析规则来提取每个城市的链接。 ```python import scrapy class LianjiaCitySpider(scrapy.Spider): name = "lianjia_city" start_urls = ['http://bj.lianjia.com/'] def parse(self, response): city_links = response.css('a.city-item::attr(href)').getall() # 根据实际页面结构找寻链接 for link in city_links: yield {'city': link} # 返回一个包含城市链接的基本字典 yield scrapy.Request(link, callback=self.parse_city) # 发送请求到详情页 def parse_city(self, response): # 解析详情页,这里只是示例,具体需要分析详情页HTML结构 city_name = response.css('h1.title::text').get() print(f"City Name: {city_name}") # 提取其他数据... yield { 'city_name': city_name, # ... 其他字段 } ``` 4. **配置 settings**:在settings.py文件中配置下载延迟(避免过于频繁访问导致封IP)、罗列中间件(如处理反爬策略)以及存储数据的方式(如CSV、JSON或MongoDB等)。 5. **运行爬虫**:在项目的根目录下,运行`scrapy crawl lianjia_city` 来启动爬虫。 6. **注意法律和道德规范**:在实际操作时,务必遵守链家网的robots.txt协议,并尊重其服务条款,避免对网站造成过大压力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值