bor*_*ytm 0 python logic operators scrapy
我是python的新手,我正在使用Scrapy库进行网络抓取项目.我没有使用内置域限制,因为我想检查域外页面的任何链接是否已经死亡.但是,我仍然希望区域内的页面与其他页面不同,并且在解析响应之前尝试手动确定站点是否在域内.
回复网址:
http://www.siteSection1.domainName.com
Run Code Online (Sandbox Code Playgroud)
如果声明:
if 'domainName.com' and ('siteSection1' or 'siteSection2' or 'siteSection3') in response.url:
parsePageInDomain()
Run Code Online (Sandbox Code Playgroud)
上述声明是真实的(页面解析),如果"siteSection1"是第一次出现在或公司的名单,但如果响应URL是相同的,但如果语句是下面也不会解析页面:
if 'domainName.com' and ('siteSection2' or 'siteSection1' or 'siteSection3') in response.url:
parsePageInDomain()
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我无法非常清楚地思考逻辑运算符的情况,我们将非常感谢任何指导.谢谢!
or不这样做.试试any:
if 'domainName.com' in response.url and any(name in response.url for name in ('siteSection1', 'siteSection2', 'siteSection3')):
Run Code Online (Sandbox Code Playgroud)
这里发生的是or返回or其两个参数的逻辑- 如果求x or y值x则返回,对于字符串意味着它不为空,或者如果不求值,则返回.所以评估为因为被认为是布尔值.xTrueyxTrue('siteSection1' or 'siteSection2' or 'siteSection3')'siteSection1''siteSection1'True
此外,您还and可以结合使用标准.and如果该参数求值为False,则返回其第一个参数;如果第一个参数求值为,则返回第二个参数True.因此,if x and y in z不测试,看是否都x和y都在z.in优先级高于and- 而且我不得不查看 - 以便进行测试if x and (y in z).再次,domainName.com评估为True,所以这将返回y in z.
any相反,是一个内置的函数,它接受布尔值,并返回一个迭代True或者False- True如果有的话都是True,False否则.它会在达到某个True值时立即停止工作,因此效率很高.我正在使用生成器表达式告诉它继续检查三个不同的可能字符串,看看它们是否在您的响应URL中.
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |