繁体   English   中英

Python逻辑运算

[英]Python Logical Operation

我是python的新手,正在使用Scrapy库进行Web抓取项目。 我没有使用内置的域限制,因为我想检查到该域外部页面的任何链接是否已失效。 但是,我仍然希望将域内的页面与域外的页面区别对待,并在解析响应之前尝试手动确定站点是否在域内。

回应网址:

http://www.siteSection1.domainName.com

如果声明:

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

如果'siteSection1'是第一个出现在or列表中的语句,则以上语句为true(已解析该页面),但是如果响应URL相同但if语句如下,则不会解析该页面:

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

我在这里做错了什么? 我还不能很清楚地思考逻辑运算符发生了什么,任何指导都将不胜感激。 谢谢!

or那样行不通。 尝试any

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

这是在发生什么情况, or返回一个逻辑值or两个参数的逻辑值-如果xTrue ,则x or y返回x ,这对于字符串表示它不为空,如果x不为True y 因此('siteSection1' or 'siteSection2' or 'siteSection3')计算结果为'siteSection1'因为当被视为布尔值时, 'siteSection1'True

此外,您还使用and组合了条件。 and如果该参数的计算结果,以返回第一个参数False ,或者第二,如果第一个参数的计算结果为True 因此, if x and y in z中的if x and y in z不测试以查看xy是否都在z in具有比and更高的优先级-并且我必须向上看 -以便测试if x and (y in z) 同样, domainName.com计算结果为True,因此它将y in z仅返回y in z

any相反,是一个内置的函数,它接受布尔的迭代,并返回TrueFalse - True ,如果其中任何一个是TrueFalse否则。 一旦达到True值,它就会立即停止工作,因此非常有效。 我正在使用一个生成器表达式来告诉它继续检查您的三个可能的字符串,以查看它们中是否有任何一个在您的响应URL中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM