如何从另一个 python 脚本将网站地址传递给 SpiderClass

Posted

技术标签:

【中文标题】如何从另一个 python 脚本将网站地址传递给 SpiderClass【英文标题】:How to pass website address to SpiderClass from another python script 【发布时间】:2020-08-02 02:01:23 【问题描述】:

我需要将登录 URL 从一个类传递给蜘蛛类并对其执行网络抓取。

import quotes as q
import scrapy
from scrapy.crawler import CrawlerProcess
class ValidateURL:

    def checkURL(self,urls):
        try:    
            if(urls):
                for key, value in urls.items():
                    if value['login_details']:
                        self.runScrap(value)                                      

        except:
            return False

    def runScrap(self,data):       
            if data:
               process = CrawlerProcess()
# here I'm passing a URL (mail.google.com)
               process.crawl(q.QuotesSpider, passed_url=data['url'])
               process.start()


# -*- coding: utf-8 -*-
from scrapy import Spider
from scrapy.http import FormRequest
from scrapy.utils.response import open_in_browser
import sys
import logging
from bs4 import BeautifulSoup
# import scrapy
# from scrapy.crawler import CrawlerProcess

logging.basicConfig(filename='app.log',level=logging.INFO)

class QuotesSpider(Spider):
    name = 'quotes'
    # I need to update this with passed variable
    start_urls = ('https://quotes.toscrape.com/login',)





    def parse(self, response):
        pass



    def scrape_pages(self, response):
      pass

我的代码是不言自明的,需要使用传递的参数更新超类变量。我该如何实施?我尝试使用self.passed_url,但只能在函数内部访问,并且没有更新。

【问题讨论】:

【参考方案1】:

您需要将传递的参数名称与蜘蛛start_urls 属性匹配。

根据docs,如果不重写spider的__init__方法,所有传递给spider类的参数都会映射到spider属性。因此,为了覆盖start_urls 属性,您需要发送完整的参数名称。

类似这样的:

    def runScrap(self,data):       
        if data:
            process = CrawlerProcess()
            process.crawl(q.QuotesSpider, start_urls=[data['url']])
            process.start()
 

希望对你有帮助。

【讨论】:

感谢@Syed。我可以知道如何检查 Scrapy 响应 html 中是否存在字符串 您可以使用response.bodyresponse.text 来查看来自服务器的响应 你能看看这个***.com/questions/61317215/…

以上是关于如何从另一个 python 脚本将网站地址传递给 SpiderClass的主要内容,如果未能解决你的问题,请参考以下文章

如何调用 shell 脚本并从另一个 shell 脚本传递参数

如何使用'for'循环将新变量传递给python脚本

如何将道具从另一个 js 模块传递给 Vue?

如何从另一个 python 脚本调用和显示 PYQT UI 脚本?

python 用于从文本文件中提取电子邮件地址的python脚本。您可以将其传递给多个文件。它将电子邮件地址打印到stdout,on

如何从python脚本将数组传递给php?