尝试使用 any() 更改 url 中的单词
Trying to use any() to change a word in a url
我正在尝试创建一个程序,该程序接受郊区的用户输入,然后 returns 该郊区的好咖啡馆列表。
我正在抓取的网页有许多不同郊区的好咖啡馆名单,但没有我居住的每个郊区的名单。
到目前为止,我所做的是创建代码以获取郊区列表,然后创建代码以使用 f 字符串为“最佳”咖啡馆抓取网页。我的旧代码意味着我必须手动输入网站上有 elif 语句页面的每个郊区。像这样:
def cafe_search():
user_suburb = input("What Suburb?")
if user_suburb == "Thornbury":
print(get_cafes("thornbury"))
elif user_suburb == "Northcote":
print(get_cafes("northcote"))
elif user_suburb == "Carlton":
print(get_cafes("carlton"))
但我正在尝试找到一种方法来使用“suburb_list”,我从维基百科中提取,然后将其与用户的输入相匹配以添加到 f 字符串表达式中,然后检查该郊区是否有咖啡馆清单。我试图用这个 f-string 来做到这一点:
f"https://www.broadsheet.com.au/melbourne/guides/best-cafes-{user_suburb}"
我正在尝试使用 any() 函数来执行此操作...不确定成功率如何?如果有任何提示,我将不胜感激。 PS,我对这一切都很陌生,这是我的第一个项目,所以我的问题可能有点笨拙,我的代码效率低下,抱歉!
#import stuff to open and scrape websites
from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests
from requests import get
#suburbs
#open suburb listing
url_suburbs = "https://en.wikipedia.org/wiki/List_of_Melbourne_suburbs"
html_suburbs = urlopen(url_suburbs)
soup_suburb_list = BeautifulSoup(html_suburbs, 'html.parser')
type(soup_suburb_list)
#grab suburb names
suburbs_containers = soup_suburb_list.select(".mw-parser-output > ul")
suburbs = []
for container in suburbs_containers:
suburb_list = container.find_all('a')
for suburb in suburb_list:
suburbs.append(suburb.text)
#cafes
def get_cafes(user_suburb):
#open url
url_cafes = f"https://www.broadsheet.com.au/melbourne/guides/best-cafes-{user_suburb}"
html_cafes = urlopen(url_cafes)
#create beautiful soup object for cafes
soup_cafe_list = BeautifulSoup(html_cafes, 'html.parser')
type(soup_cafe_list)
#grab cafe names
cafe_names = soup_cafe_list.find_all("h2", class_= "venue-title")
print (cafe_names)
#function to search cafes
def cafe_search():
user_suburb = input("What Suburb?")
if user_suburb == any(suburbs):
print(get_cafes("user_suburb"))
any(mylist)
returns 如果 mylist
中的任何内容在 Python 测试 True 的方式中为 True - 就像 or
on mylist
值。同样,all(Mylist)
类似于 mylist
中值的 and
。参见 docs.python.org/3.8/library/functions.html#any
所以要检查您的代码:
if user_suburb == any(suburbs):
any(suburbs)
将 return True
如果 suburbs
不是零长度,并且 user_suburb
不是值 True
,所以测试总是会失败。
更多关于 Python 的真值测试在这里,见下文 真值测试 - 值得一读! - https://docs.python.org/3.8/library/stdtypes.html
所以你不能使用 any()
但 in
运算符对列表起作用,所以更改:
if user_suburb == any(suburbs)
至
if user_suburb in suburbs
您可能需要注意大小写一致,因为 in
区分大小写 - 可能最简单的方法是将进入郊区的所有内容小写,并在使用 [=29 之前将 user_suburb 小写=]
将 suburbs
列表更改为小写,例如
suburbs.append(suburb.text)
至
suburbs.append(suburb.text.lower())
并将检查更改为:
if user_suburb.lower() in suburbs:
我正在尝试创建一个程序,该程序接受郊区的用户输入,然后 returns 该郊区的好咖啡馆列表。
我正在抓取的网页有许多不同郊区的好咖啡馆名单,但没有我居住的每个郊区的名单。
到目前为止,我所做的是创建代码以获取郊区列表,然后创建代码以使用 f 字符串为“最佳”咖啡馆抓取网页。我的旧代码意味着我必须手动输入网站上有 elif 语句页面的每个郊区。像这样:
def cafe_search():
user_suburb = input("What Suburb?")
if user_suburb == "Thornbury":
print(get_cafes("thornbury"))
elif user_suburb == "Northcote":
print(get_cafes("northcote"))
elif user_suburb == "Carlton":
print(get_cafes("carlton"))
但我正在尝试找到一种方法来使用“suburb_list”,我从维基百科中提取,然后将其与用户的输入相匹配以添加到 f 字符串表达式中,然后检查该郊区是否有咖啡馆清单。我试图用这个 f-string 来做到这一点:
f"https://www.broadsheet.com.au/melbourne/guides/best-cafes-{user_suburb}"
我正在尝试使用 any() 函数来执行此操作...不确定成功率如何?如果有任何提示,我将不胜感激。 PS,我对这一切都很陌生,这是我的第一个项目,所以我的问题可能有点笨拙,我的代码效率低下,抱歉!
#import stuff to open and scrape websites
from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests
from requests import get
#suburbs
#open suburb listing
url_suburbs = "https://en.wikipedia.org/wiki/List_of_Melbourne_suburbs"
html_suburbs = urlopen(url_suburbs)
soup_suburb_list = BeautifulSoup(html_suburbs, 'html.parser')
type(soup_suburb_list)
#grab suburb names
suburbs_containers = soup_suburb_list.select(".mw-parser-output > ul")
suburbs = []
for container in suburbs_containers:
suburb_list = container.find_all('a')
for suburb in suburb_list:
suburbs.append(suburb.text)
#cafes
def get_cafes(user_suburb):
#open url
url_cafes = f"https://www.broadsheet.com.au/melbourne/guides/best-cafes-{user_suburb}"
html_cafes = urlopen(url_cafes)
#create beautiful soup object for cafes
soup_cafe_list = BeautifulSoup(html_cafes, 'html.parser')
type(soup_cafe_list)
#grab cafe names
cafe_names = soup_cafe_list.find_all("h2", class_= "venue-title")
print (cafe_names)
#function to search cafes
def cafe_search():
user_suburb = input("What Suburb?")
if user_suburb == any(suburbs):
print(get_cafes("user_suburb"))
any(mylist)
returns 如果 mylist
中的任何内容在 Python 测试 True 的方式中为 True - 就像 or
on mylist
值。同样,all(Mylist)
类似于 mylist
中值的 and
。参见 docs.python.org/3.8/library/functions.html#any
所以要检查您的代码:
if user_suburb == any(suburbs):
any(suburbs)
将 return True
如果 suburbs
不是零长度,并且 user_suburb
不是值 True
,所以测试总是会失败。
更多关于 Python 的真值测试在这里,见下文 真值测试 - 值得一读! - https://docs.python.org/3.8/library/stdtypes.html
所以你不能使用 any()
但 in
运算符对列表起作用,所以更改:
if user_suburb == any(suburbs)
至
if user_suburb in suburbs
您可能需要注意大小写一致,因为 in
区分大小写 - 可能最简单的方法是将进入郊区的所有内容小写,并在使用 [=29 之前将 user_suburb 小写=]
将 suburbs
列表更改为小写,例如
suburbs.append(suburb.text)
至
suburbs.append(suburb.text.lower())
并将检查更改为:
if user_suburb.lower() in suburbs: