python - Web Scrape - Python - 如果字符串中的“文本”然后字符串 =“文本”问题 - 冲突的命令?
问题描述
我有一个不寻常的
也许在 python 中有不同的" "
含义?' '
这个例子是这样的:
calibre = soup.select_one('h1[itemprop="name"]')
gun_calibre = calibre.text if calibre else ''
if "410 Gauge" in gun_calibre:
gun_calibre = gun_calibre.replace(gun_calibre,"410 Gauge")
if "10 Gauge" in gun_calibre:
gun_calibre = gun_calibre.replace(gun_calibre,"10 Gauge")
在上面的示例中,如果我有字符串“Mossberg 410 Gauge shotgun”,python 会将其选为“10 Gauge”
我有其他地方我说过
gun_calibre = gun_calibre.replace(gun_calibre,".308")
if ".30" in gun_calibre:
gun_calibre = gun_calibre.replace(gun_calibre,".30")
因为.30
在两个 if 语句中都有.308
,它将被抓取为.30
而不是.308
.
什么会导致这种情况?
我的假设是,如果它只满足“”中的确切标准,那么它将执行命令。为什么一个会推翻另一个?
解决方案
你需要做两件事。首先是elif
像@Oliver.R 提到的那样使用,但第二个是你必须从最严格的开始进行比较。
例如,如果您想匹配410 Gauge
、10 Gauge
和0 Gauge
,则需要按照我提到的顺序进行比较。
if "410 Gauge" in gun_calibre:
gun_calibre = gun_calibre.replace(gun_calibre,"410 Gauge")
elif "10 Gauge" in gun_calibre:
gun_calibre = gun_calibre.replace(gun_calibre,"10 Gauge")
elif "0 Gauge" in gun_calibre:
gun_calibre = gun_calibre.replace(gun_calibre,"0 Gauge")
但是,由于我们正在编程,所以让我们进行一些编程以使其更简单和可扩展。我们可以注意到,必须在较小的字符串之前检查较大的字符串,因此我们可以执行以下操作:
calibres = ['410 Gauge', '0 Gauge', '10 Gauge', '.30', '.308', '.22 LR', '.223']
sorted_calibres = sorted(calibres , key=len, reverse=True)
gun_calibre = ''
for calibre in sorted_calibres:
if calibre in gun_calibre:
gun_calibre = calibre
break
推荐阅读
- mongodb - MongoDB的最佳索引策略
- python - 如何测试多类/标签图像分类器?
- javascript - 如何从不断变化的幻灯片中删除闪光灯?
- python - 使用变量迭代熊猫中的列
- google-apps-script - 如何在 Google 表格中使用 Google Vision API
- sql - Golang 函数返回一个 postgres 选择结果,然后在另一个函数中扫描它
- angular - Angular:NgFor 仅支持绑定到 Iterables,例如 Arrays
- reactjs - useState 不将状态更新为仅 0 和 1
- python - 如何更改我们从 youtube-search-python 包中获得的结果?
- javascript - 角度 6+ 中未定义的 Cookie 值