Python逻辑操作

 手机用户2502921001 发布于 2023-02-13 14:59

我是python的新手,我正在使用Scrapy库进行网络抓取项目.我没有使用内置域限制,因为我想检查域外页面的任何链接是否已经死亡.但是,我仍然希望区域内的页面与其他页面不同,并且在解析响应之前尝试手动确定站点是否在域内.

回复网址:

http://www.siteSection1.domainName.com

如果声明:

if 'domainName.com' and ('siteSection1' or 'siteSection2' or 'siteSection3') in response.url:
    parsePageInDomain()

上述声明是真实的(页面解析),如果"siteSection1"是第一次出现在或公司的名单,但如果响应URL是相同的,但如果语句是下面也不会解析页面:

if 'domainName.com' and ('siteSection2' or 'siteSection1' or 'siteSection3') in response.url:
        parsePageInDomain()

我在这做错了什么?我无法非常清楚地思考逻辑运算符的情况,我们将非常感谢任何指导.谢谢!

1 个回答
  • or不这样做.试试any:

    if 'domainName.com' in response.url and any(name in response.url for name in ('siteSection1', 'siteSection2', 'siteSection3')):
    

    这里发生的是or返回or其两个参数的逻辑- 如果求x or yx则返回,对于字符串意味着它不为空,或者如果不求值,则返回.所以评估为因为被认为是布尔值.xTrueyxTrue('siteSection1' or 'siteSection2' or 'siteSection3')'siteSection1''siteSection1'True

    此外,您还and可以结合使用标准.and如果该参数求值为False,则返回其第一个参数;如果第一个参数求值为,则返回第二个参数True.因此,if x and y in z不测试,看是否都xy都在z.in优先级高于and- 而且我不得不查看 - 以便进行测试if x and (y in z).再次,domainName.com评估为True,所以这将返回y in z.

    any相反,是一个内置的函数,它接受布尔值,并返回一个迭代True或者False- True如果有的话都是True,False否则.它会在达到某个True值时立即停止工作,因此效率很高.我正在使用生成器表达式告诉它继续检查三个不同的可能字符串,看看它们是否在您的响应URL中.

    2023-02-13 15:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有