python - 无法在另一个函数中以正确的方式打印名称

标签 python python-3.x function web-scraping beautifulsoup

我用 python 编写了一个脚本,使用 .get_links( ) 函数。然后我创建了另一个函数 .get_info() 以到达另一个页面(使用从第一个函数派生的链接)以便从那里抓取电话号码。

如果我的目标是解析该网页中的两个项目,我根本不需要创建第二个函数,因为它们已经在着陆页中可用。

但是,我希望我的解析器的行为方式是在第二个函数中打印 names(从第一个函数继承)以及 phone numbers那里。最重要的是,我不想踢出第二个函数中定义的 for loop。如果 for 循环 不在第二个函数中,那么问题就不会出现。在不使用 for 循环 的情况下,我已经可以获得所需的输出。

到目前为止,这是我的脚本:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

url = "https://potguide.com/alaska/marijuana-dispensaries/"

def get_links(link):
    session = requests.Session()
    session.headers['User-Agent'] = 'Mozilla/5.0'
    r = session.get(link)
    soup = BeautifulSoup(r.text,"lxml")
    for items in soup.select("#StateStores .basic-listing"):
        name = items.select_one("h4 a").text
        namelink = urljoin(link,items.select_one("h4 a").get("href"))  ##making it a fully qualified url
        get_info(session,name,namelink)          ##passing session in order to reuse it

def get_info(session,title,url):
    r = session.get(url)
    soup = BeautifulSoup(r.text,"lxml")
    for items in soup.select("ul.list-unstyled"):  ##if I did not use for loop I could get the output as desired.
        try:
            phone = items.select_one("a[href^='tel:']").text
        except:
            phone = ""
        print(title,phone)

if __name__ == '__main__':
    get_links(url)

我得到的输出:

AK Frost 
AK Frost 
AK Frost 
AK Frost 
AK Frost 
AK Frost (907) 563-9333
AK Frost 
AK Frost 
AK Frost (907) 563-9333
AK Frost  
AK Fuzzy Budz 
AK Fuzzy Budz (907) 644-2838
AK Fuzzy Budz 
AK Fuzzy Budz 
AK Fuzzy Budz (907) 644-2838

我的预期输出:

AK Frost (907) 563-9333
AK Fuzzy Budz (907) 644-2838

最佳答案

如果目标只是获得预期的输出,这应该可行:

def get_info(session,title,url):
    r = session.get(url)
    soup = BeautifulSoup(r.text,"lxml")
    for items in soup.select("ul.list-unstyled"):
        try:
           phone = items.select_one("a[href^='tel:']").text
        except:
           # skip item and continue
           continue  
        else:
           # exception wasn't rised, you have the phone
           print(title,phone)
           break

关于python - 无法在另一个函数中以正确的方式打印名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50492428/

相关文章:

python - numpy 从值不为 0 的数组中随机采样

python-3.x - 使用服务器端加密的S3上传(python SDK)

jquery margin 不会适应第一次点击

python - Python 中的伊辛模型

python - Matplotlib基于手动缩放的x轴缩放y轴

python - OverflowError 无法将 'int' 放入索引大小的整数中

python - Pandas groupby 获得平均一天

python-3.x - 如何将 Turtle Canvas 保存为图像(.png 或 .jpg)

matlab - 'varargin' 函数在仅提供名称-值对时给出错误 : MATLAB

c# - 这个从两个 8 位值中找到 14 位值的函数的反面是什么?