将变量放在双引号字符串中,但作为嵌套 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”。
- 我想要的是尝试遍历列表。
- 列表中的每个元素都充当 select_one 函数的参数,如下例所示。
- 出于某种原因,我尝试了以上四种将变量放在双引号内的方法,我总是得到 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}")')
作为函数参数,如何将变量放入双引号字符串中?
这是我尝试过的四种将变量放入带引号的字符串的经典方法。
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”。
- 我想要的是尝试遍历列表。
- 列表中的每个元素都充当 select_one 函数的参数,如下例所示。
- 出于某种原因,我尝试了以上四种将变量放在双引号内的方法,我总是得到 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}")')