【发布时间】:2019-11-25 14:09:46
【问题描述】:
我正在尝试使用 python 在其中应用多处理来创建一个脚本,以从网页中获取不同用户的链接。虽然用户的链接在它的登录页面中可用,但我试图从他们的内页中挖掘出来。但是,当我在get_links() 函数中使用yield 并在get_target_link() 中使用print() 时,我可以得到预期的结果。
我的问题是:如何在这两个函数中使用 yield 来实现相同的效果?
我试过了:
import requests
import concurrent.futures
from urllib.parse import urljoin
from bs4 import BeautifulSoup
def get_links(url):
res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")
for item in soup.select(".summary .question-hyperlink"):
yield urljoin(base,item.get("href"))
def get_target_link(targeturl):
res = requests.get(targeturl)
soup = BeautifulSoup(res.text,"lxml")
name_link = urljoin(base,soup.select_one(".user-details > a").get("href"))
yield name_link
if __name__ == '__main__':
base = 'https://stackoverflow.com'
mlink = "https://stackoverflow.com/questions/tagged/web-scraping"
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
future_to_url = {executor.submit(get_target_link, url): url for url in get_links(mlink)}
concurrent.futures.as_completed(future_to_url)
上面的脚本根本没有产生任何结果。
【问题讨论】:
标签: python python-3.x web-scraping multiprocessing yield