【发布时间】:2014-02-13 00:35:06
【问题描述】:
我基本上试图获得与下面的代码相同的结果,但使用的是多处理。下面的代码是一个基本的网络爬虫,它打印给定网站中的所有 URL。我希望能够使用多个进程一次检查来自多个站点的新 URL。我有一个单独的网络抓取脚本,它使用池和 apply_async 一次抓取多个站点,但我从一个静态的 URL 列表开始。然后我有这个脚本,它一次遍历一个站点以获取完整的非重复 URL 列表。我不知道如何获得两全其美。因为我的 URL 列表不是静态的(它会在找到新 URL 时添加),所以我不知道如何遍历它并使用 apply_async 返回结果。
我已经阅读过,我觉得队列可能是解决方案的关键,但我已经尝试了所有方法,但无法让它发挥作用。对不起,糟糕的解释。我对python还是很陌生。有人可以帮忙吗?
import lxml.html
import requests
url = "http://www.frontiercouriers.com"
url_check = "frontiercouriers.com"
urls = [url]
visited = [url]
while len (urls) >0:
try:
site_open = requests.get(urls[0])
soup = lxml.html.fromstring(site_open.text)
urls.pop(0)
for href in soup.xpath('//a/@href'):
if 'http' in href:
site = href
elif href.startswith('/'):
site = str(url+href)
else:
site = str(url+'/'+href)
if url_check in site and site not in visited:
urls.append(site)
visited.append(site)
print (site)
except Exception as e:
print ("\n"+str(e))
print (urls[0])
urls.pop(0)
【问题讨论】:
标签: python python-3.x queue multiprocessing web-crawler