【发布时间】:2020-10-12 17:51:30
【问题描述】:
我使用concurrent.futures 库创建了一个脚本来打印来自fetch_links 函数的结果。当我在函数内使用print 语句时,我会得到相应的结果。我现在想做的是使用 yield 语句打印该函数的结果。
有什么方法可以修改main 函数下的内容,以便打印fetch_links 函数的结果,保持原样,即保持 yield 语句?
import requests
from bs4 import BeautifulSoup
import concurrent.futures as cf
links = [
"https://stackoverflow.com/questions/tagged/web-scraping?tab=newest&page=2&pagesize=50",
"https://stackoverflow.com/questions/tagged/web-scraping?tab=newest&page=3&pagesize=50",
"https://stackoverflow.com/questions/tagged/web-scraping?tab=newest&page=4&pagesize=50"
]
base = 'https://stackoverflow.com{}'
def fetch_links(s,link):
r = s.get(link)
soup = BeautifulSoup(r.text,"lxml")
for item in soup.select(".summary .question-hyperlink"):
# print(base.format(item.get("href")))
yield base.format(item.get("href"))
if __name__ == '__main__':
with requests.Session() as s:
with cf.ThreadPoolExecutor(max_workers=5) as exe:
future_to_url = {exe.submit(fetch_links,s,url): url for url in links}
cf.as_completed(future_to_url)
【问题讨论】:
标签: python python-3.x web-scraping concurrent.futures