scrapy部署以及对外提供接口

两个命令:

pip install scrapyd
pip install scrapyd-client

服务端:scrapyd

客户端 scrapyd-client

如何理解服务端和客户端?

服务端运行了爬虫程序后,客户端也要开启然后对服务端进行连接。

启动服务端:

当看到以下页面即成功!:

开启cfg:

部署: 部署成功

部署命令:(部署命令如何情况下使用?当scrapyd运行服务器的时候,要通过部署命令将已有的爬虫部署到服务器上,通过调用curl http://localhost:6800/schedule.json -d project=myspider -d spider=lianjia如此爬虫的功能才能使用。如果不部署,那么只能使用 scrapy crawl 爬虫名 来调用)

scrapyd-deploy mys -p myspider

部署成功后,项目目录中多了一些文件:

启动爬虫

客户端,启动爬虫:(项目名:myspider, 爬虫名:lianjia)

curl http://localhost:6800/schedule.json -d project=myspider -d spider=lianjia

于是,在服务端就有了记录:

此时多了一条记录:

备注:

如果没有出现刚才的Jobs中的日志,就查看scrapyd 中的报错信息进行纠正即可。

关闭爬虫:

也是发送POST请求

实际操作:

调用接口:

scrapyd 提示完成:

结果展示和 本地运行的 scrapy crawl lianjia 的效果是一样的, 也是会弹出一个chrome浏览器。

我的爬虫代码:

import scrapy

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
import json
import os

class LianjiaSpider(scrapy.Spider):
    name = "lianjia"
    allowed_domains = ["lianjia.com"]
    start_urls = ["https://sh.lianjia.com/ershoufang/sq5968/?sug=小区名字"]

    def __init__(self, *args, **kwargs):
        super(LianjiaSpider, self).__init__(*args, **kwargs)

        chrome_options = Options()
        chrome_options.add_argument("--start-maximized")  # 启动最大化
        chrome_options.add_argument("--disable-extensions")  # 禁用扩展程序
        chrome_options.add_argument("--disable-gpu")  # 禁用GPU加速

        driver_path = r'D:\software\chromedriver\chromedriver127\chromedriver-win64\chromedriver.exe'  # 确保chromedriver在环境变量中
        service = Service(executable_path=driver_path)

        self.driver = webdriver.Chrome(service=service, options=chrome_options)

    def parse(self, response):
        self.driver.get(response.url)
        page_source = self.driver.page_source
        response = scrapy.Selector(text=page_source)
        # 解析数据
        listings = []
        for li in response.css('ul.sellListContent li.clear'):
            img = li.css('a img.lj-lazy::attr(src)').get()
            title = li.css('div.title a::text').get()
            detail_url = li.css('div.title a::attr(href)').get()
            community = li.css('div.flood a[data-el="region"]::text').get()
            area = li.css('div.address div.houseInfo::text').get()
            follow_info = li.css('div.followInfo::text').get()
            tag = li.css('div.tag span::text').getall()
            total_price = li.css('div.priceInfo div.totalPrice span::text').get()
            unit_price = li.css('div.priceInfo div.unitPrice span::text').get()

            listings.append({
                'img': img,
                'title': title,
                'detail_url': detail_url,
                'community': community,
                'area': area,
                'follow_info': follow_info,
                'tag': tag,
                'total_price': total_price,
                'unit_price': unit_price,
            })

        # 保存数据到JSON文件
        output_file = os.path.join(os.getcwd(), 'lianjia_listings.json')
        with open(output_file, 'w', encoding='utf-8') as f:
            json.dump(listings, f, ensure_ascii=False, indent=4)

        self.log(f'Saved file {output_file}')

        # 等待20秒
        time.sleep(20)

        # 关闭浏览器
        self.driver.quit()

特别注意: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值