Python 无法一次返回所有结果
我已经用python编写了一个脚本来从网页中获取一些链接。我的脚本中有两个函数。第一个函数从网页收集到本地企业的链接,第二个函数遍历这些链接并收集到各种事件的URL 当我尝试使用脚本时,我得到了期望的结果 如何返回符合以下设计的所有结果? 下面的脚本返回单个链接的结果,而我希望立即返回所有结果,保持设计的原样(逻辑可能会有所不同)Python 无法一次返回所有结果,python,python-3.x,web-scraping,return,Python,Python 3.x,Web Scraping,Return,我已经用python编写了一个脚本来从网页中获取一些链接。我的脚本中有两个函数。第一个函数从网页收集到本地企业的链接,第二个函数遍历这些链接并收集到各种事件的URL 当我尝试使用脚本时,我得到了期望的结果 如何返回符合以下设计的所有结果? 下面的脚本返回单个链接的结果,而我希望立即返回所有结果,保持设计的原样(逻辑可能会有所不同) 首先,我删除了全局链接列表,因为它是从函数返回的,保持全局会产生重叠的结果。接下来,我添加了一个函数来按照您想要的方式“组装”链接。我使用了一个集合来防止重复链接 #
首先,我删除了全局
链接列表,因为它是从函数返回的,保持全局会产生重叠的结果。接下来,我添加了一个函数来按照您想要的方式“组装”链接。我使用了一个集合来防止重复链接
#!/usr/bin/python
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
def collect_links(link):
res = requests.get(link)
soup = BeautifulSoup(res.text, "lxml")
items = [urljoin(url,item.get("href")) for item in soup.select(".business-listings-category-list .field-content a[hreflang]")]
return items
def fetch_info(ilink):
linklist = []
res = requests.get(ilink)
soup = BeautifulSoup(res.text, "lxml")
for item in soup.select(".business-teaser-title a[title]"):
linklist.append(urljoin(url,item.get("href")))
return linklist
def fetch_all_links(url):
links = set()
for itemlink in collect_links(url):
links.update(fetch_info(itemlink))
return list(links)
if __name__ == '__main__':
url = "https://www.parentmap.com/atlas"
print(fetch_all_links(url))
一个接一个地得到结果的主要原因是,您在一个循环中调用fetchinfo,该循环一次又一次地调用函数,导致一个接一个地打印数据,而不是在fetchinfo函数中使用循环。请尝试下面的代码
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
linklist = []
def collect_links(link):
res = requests.get(link)
soup = BeautifulSoup(res.text, "lxml")
items = [urljoin(url,item.get("href")) for item in soup.select(".business-listings-category-list .field-content a[hreflang]")]
return items
def fetch_info(url):
for itemlink in collect_links(url):
res = requests.get(ilink)
soup = BeautifulSoup(res.text, "lxml")
for item in soup.select(".business-teaser-title a[title]"):
linklist.append(urljoin(url,item.get("href")))
return linklist
if __name__ == '__main__':
url = "https://www.parentmap.com/atlas"
for itemlink in collect_links(url):
print(fetch_info(itemlink))
所以,我不应该像我在脚本@SimonF中尝试的那样使用全局变量,对吗?如果您使用全局列表,所有链接都会附加到它,因此每次调用fetch_info都会从一个非空列表开始,然后返回
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
linklist = []
def collect_links(link):
res = requests.get(link)
soup = BeautifulSoup(res.text, "lxml")
items = [urljoin(url,item.get("href")) for item in soup.select(".business-listings-category-list .field-content a[hreflang]")]
return items
def fetch_info(url):
for itemlink in collect_links(url):
res = requests.get(ilink)
soup = BeautifulSoup(res.text, "lxml")
for item in soup.select(".business-teaser-title a[title]"):
linklist.append(urljoin(url,item.get("href")))
return linklist
if __name__ == '__main__':
url = "https://www.parentmap.com/atlas"
for itemlink in collect_links(url):
print(fetch_info(itemlink))