我是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()
我在这做错了什么?我无法非常清楚地思考逻辑运算符的情况,我们将非常感谢任何指导.谢谢!
or
不这样做.试试any
:
if 'domainName.com' in response.url and any(name in response.url for name in ('siteSection1', 'siteSection2', 'siteSection3')):
这里发生的是or
返回or
其两个参数的逻辑- 如果求x or y
值x
则返回,对于字符串意味着它不为空,或者如果不求值,则返回.所以评估为因为被认为是布尔值.x
True
y
x
True
('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中.