将变量放在双引号字符串中,但作为嵌套 for 循环中的函数参数

Put a variable inside double quoted string, but as function parameter in a nested for loop

作为函数参数,如何将变量放入双引号字符串中?

这是我尝试过的四种将变量放入带引号的字符串的经典方法。

k = "boss"

test = 'p:contains({})'.format(k)
print(test, type(test))
test_2 = 'p:contains(%s)' % (k)
print(test, type(test_2))
test_3 = f'p:contains({k})'
print(test, type(test_3))
test_4 = 'p:contains('+str(k)+')'
print(test, type(test_4 ))

这给了我以下输出。到目前为止,还不错。

p:contains(boss) <class 'str'>
p:contains(boss) <class 'str'>
p:contains(boss) <class 'str'>
p:contains(boss) <class 'str'>

问题来了。为了测试目的,我抓取了“crawler-test.com”。

  1. 我想要的是尝试遍历列表。
  2. 列表中的每个元素都充当 select_one 函数的参数,如下例所示。
  3. 出于某种原因,我尝试了以上四种将变量放在双引号内的方法,我总是得到 SelectorSyntaxError "Invalid character"
import requests
from bs4 import BeautifulSoup

url = "https://crawler-test.com/"
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")

soup.select('div div:nth-child(2) div')

mobile_list = ["Separate Desktop page with separate mobile and/or AMP", 
               "Separate Desktop page with AMP page as AMP and Mobile", 
               "Separate Desktop with different H1",
              "No mobile configuration"]

for m in mobile_list:
                    # This is the tricky part
                    # I want to put the m inside 
    for a in soup.select_one('a:contains(m)'):
    #for a in soup.select_one('a:contains({})'.format(m)):
    #for a in soup.select_one('a:contains(%s)' % m):
    #for a in soup.select_one(f'a:contains({m})'):
    #for a in soup.select_one('a:contains('+str(m)+')'): 

        print(a)

如果一切顺利,输出应该是这样的

"Separate Desktop page with separate mobile and/or AMP"
"Separate Desktop page with AMP page as AMP and Mobile"
"Separate Desktop with different H1"
"No mobile configuration"

只用引号...

soup.select_one(f'a:contains("{m}")')